#include <stdio.h>
#include <ctype.h>
#include <cstdlib>
#include <algorithm>
using namespace std;
int v[3000005];
/** Funcţiile necesare parsării fişierului de intrare **/
FILE *_fin, *fout;
int _in_loc; char _in_buff[4096];
void read_init(const char* nume) // Apelaţi această funcţie la începutul funcţiei <main>
{
_fin = fopen(nume, "r");
_in_loc = 4095;
}
char read_ch()
{
++_in_loc;
if (_in_loc == 4096) {
_in_loc = 0;
fread(_in_buff, 1, 4096, _fin);
}
return _in_buff[_in_loc];
}
int read_u32() // Apelaţi această funcţie pentru a citi un număr ce se încadrează în categoria <unsigned int>
{
int u32 = 0; char c;
while (!isdigit(c = read_ch()) && c != '-');
int sgn = 1;
if (c == '-') {
sgn = -1;
} else {
u32 = c - '0';
}
while (isdigit(c = read_ch())) {
u32 = u32 * 10 + c - '0';
}
return u32 * sgn;
}
int sparg_random(int st, int dr)
{
int pozpivot=rand()%(dr-st+1);
int pivot=v[st+pozpivot];
swap(v[st+pozpivot],v[dr]);
pozpivot=st-1;
for(int i=st; i<dr; i++)
if(v[i]<=pivot){
pozpivot=pozpivot+1;
swap(v[i], v[pozpivot]);
}
swap(v[pozpivot+1], v[dr]);
return pozpivot+1;
}
int aleg_random(int st, int dr, int poz)
{
if(st==dr)
return v[st];
int k=sparg_random(st, dr);
if(poz==k-st+1)
return v[k];
if(poz<k-st+1)
return aleg_random(st, k-1, poz);
else
return aleg_random(k+1, dr, poz-(k-st+1));
}
int main()
{ fout=fopen("sdo.out", "w");
int n,k,i;
srand(12345678);
read_init("sdo.in");
n=read_u32();
k=read_u32();
for(i=1; i<=n; i++)
v[i]=read_u32();
fprintf(fout, "%d", aleg_random(1, n, k));
return 0;
}