#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <cmath>
#include <set>
#include <map>
#define x first
#define y second
using namespace std;
const int N = 1e5 + 10;
typedef pair<int, int> PII;
typedef long long LL;
int a[N];
int n, k;
int bfprt(int l, int r, int k);
int getPivot(int l, int r) {
if (r - l + 1 <= 5) {
sort(a + l, a + r + 1);
return l + r >> 1;
}
int p = l - 1;
for (int i = l; i + 4 <= r; i += 5) {
sort(a + i, a + i + 5);
int mid = i + i + 4 >> 1;
swap(a[++ p], a[mid]);
}
return bfprt(l, p, (p - l + 1 >> 1) + 1);
}
int partition(int l, int r, int pivot) {
swap(a[pivot], a[r]);
int j = l;
for (int i = l; i < r; i ++) {
if (a[i] < a[r]) {
swap(a[j ++], a[i]);
}
}
swap(a[j], a[r]);
return j;
}
int bfprt(int l, int r, int k) {
if (l == r) return l;
int pivot = getPivot(l, r);
int p = partition(l, r, pivot);
int num = p - l + 1;
if (num == k) return p;
else if (num > k) return bfprt(l, p - 1, k);
else return bfprt(p + 1, r, k - num);
}
int quick_sort(int a[], int l, int r, int k) {
if(l >= r) return a[k];
int mid = l + r >> 1;
int i = l - 1, j = r + 1;
int x = a[mid];
while (i < j) {
do i ++; while(a[i] < x);
do j --; while(a[j] > x);
if(i < j) swap(a[i], a[j]);
}
if (j >= k) return quick_sort(a, l, j, k);
else return quick_sort(a, j + 1, r, k);
}
int main() {
cin >> n >> k;
for(int i = 1; i <= n; i ++) cin >> a[i];
cout << a[bfprt(1, n, k)] << endl;
}