#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int SDO(int, int, int, int*);
int getMiddle(int, int, int, int*);
int getMiddlePosition(int, int, int, int*);
int main() {
FILE *f, *g;
f = freopen("sdo.in", "r", stdin);
g = freopen("sdo.out", "w", stdout);
int n, k;
scanf("%d %d", &n, &k);
srand(time(NULL));
int *v = malloc(n * sizeof(int));
int i;
for (i = 0; i < n; ++i) {
scanf("%d", &v[i]);
}
printf("%d", SDO(0, n - 1, k - 1, v));
return 0;
}
int SDO(int left, int right, int k, int *v) {
int i = left;
int j = right;
//int rand1 = rand() % (right - left + 1) + left;
//int rand2 = rand() % (right - left + 1) + left;
//int rand3 = rand() % (right - left + 1) + left;
//int pivot = getMiddle(rand1, rand2, rand3, v);
//int pos = getMiddlePosition(rand1, rand2, rand3, v);
int pivot = v[(left + right) / 2];
int pos = (left + right) / 2;
while (i <= j) {
while (v[i] < pivot) {
i ++;
}
while (v[j] > pivot) {
j --;
}
if (i <= j) {
if (i == pos) {
pos = j; /// schimb pozitia unde se afla pivot
} else if (j == pos) {
pos = i;
}
int aux = v[i];
v[i] = v[j];
v[j] = aux;
i ++;
j --;
}
}
if (pos == k) {
return v[pos];
} else if (pos < k) {
return SDO(i, right, k, v);
} else {
return SDO(left, j, k, v);
}
}
int getMiddle(int x, int y, int z, int *v) {
if (v[x] <= v[y] && v[x] <= v[z]) {
return ( (v[y] < v[z]) ? v[y]:v[z] );
}
if (v[y] <= v[x] && v[y] <= v[z]) {
return ( (v[x] < v[z]) ? v[x]:v[z]);
}
if (v[z] <= v[x] && v[z] <= v[y]) {
return ( (v[x] < v[y]) ? v[x]:v[y] );
}
}
int getMiddlePosition(int x, int y, int z, int *v) {
if (v[x] <= v[y] && v[x] <= v[z]) {
return ( (v[y] < v[z]) ? y:z );
}
if (v[y] <= v[x] && v[y] <= v[z]) {
return ( (v[x] < v[z]) ? x:z );
}
if (v[z] <= v[x] && v[z] <= v[y]) {
return ( (v[x] < v[y]) ? x:y );
}
}