int a[MX];
void insert(int a[],int l,int r)
{
for(int i=l+1,j;i<=r;++i)
{
if(a[i]>a[i-1]) continue;
int tmp=a[i];
for(j=i;j>l&&a[j-1]>tmp;--j) a[j]=a[j-1];
a[j]=tmp;
}
}
int divide(int a[],int l, int r)
{
int x = a[l];
while (l < r)
{
while (l < r && a[r] >= x) r--;
if (l < r) a[l++] = a[r];
while (l < r && a[l] < x) l++;
if (l < r) a[r--] = a[l];
}
a[l] = x;
return l;
}
int Select(int s[],int l,int r,int k,int len)
{
if(r-l+1<=k)
{
insert(s,l,r);
return l+k-1;
}
while(1)
{
int n = r-l+1;
for(int i=1;i<=n/r;++i)
{
insert(s,l+(i-1)*len,l+i*len-1);
swap(s[l+i-1],a[l+(i-1)*len+r/2]);
}
int tag = Select(s,l,l+n/r-1,n/r/2+n/r%2,len);
swap(s[l],s[tag]);
tag = divide(s,l,r);
if(tag-l+1==k) return tag;
else if(tag-l+1>k) r=tag-1;
else k-=(tag-l+1),l=tag+1;
}
}
signed main()
{
int n,k;cin>>n>>k;
rpp(i,n) cin>>a[i];
cout<<a[Select(a,1,n,k,5)]<<endl;;
stop;
return 0;
}