#include <stdio.h>
int v[3000000];
void swap (int *a, int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
int sdo (int *v, int left, int right, int k) {
int pivot = v[(left + right) / 2];
/*
printf ("======QUICKSORTING=====\n");
printf ("pivot = %d, left = %d, right = %d, k = %d\n", pivot, left, right, k);
int i;
for (i = 0; i < 8; ++i)
printf ("%d ", v[i]);
printf ("\n");
*/
if (k == 0)
return v[left];
if (left >= right)
return v[left];
int begin = left, end = right;
while (begin <= end) {
while (v[begin] < pivot)
++begin;
while (v[end] > pivot)
--end;
if (begin <= end) {
swap (&v[begin], &v[end]);
++begin;
--end;
}
}
/*
printf ("=========After partitioning step=========\n");
for (i = 0; i < 8; ++i)
printf ("%d ", v[i]);
printf ("\n");
printf ("k = %d, end = %d, begin = %d\n", k, end, begin);
*/
if (k < end)
return sdo (v, left, end, k);
else
return sdo (v, begin, right, k - end - 1);
}
void quicksort(int *v, int left, int right) {
int pivot = v[(left + right) / 2];
if (left >= right)
return;
int begin = left, end = right;
while (begin <= end) {
while (v[begin] < pivot)
++begin;
while (v[end] > pivot)
--end;
if (begin <= end) {
swap (&v[begin], &v[end]);
++begin;
--end;
}
}
quicksort (v, left, end);
quicksort (v, begin, right);
}
int main () {
freopen ("sdo.in", "r", stdin);
freopen ("sdo.out", "w", stdout);
int n, k;
scanf ("%d%d", &n, &k);
int i;
for (i = 0; i < n; ++i)
scanf ("%d", &v[i]);
//printf ("I am looking for the smallest %d\n", k);
int s = sdo (v, 0, n - 1, k);
printf ("%d\n", s);
//quicksort(v, s, n);
/*quicksort(v, 0, n - 1);
for (i = 0; i < n; ++i)
printf ("%d ", v[i]);
printf ("\n");
*/
return 0;
}