1 #include <bits/stdc++.h>
2 #define maxn 200010
3 using namespace std;
4 int ent,n,m,l,r,k;
5 int L[maxn],R[maxn],sum[maxn];//×ó¶ù×Ó ÓÒ¶ù×Ó ½ÚµãÖµ
6 int a[maxn],hash[maxn];//ÔÊý×é ÀëÉ¢»¯ºóÊý×é
7 int type[maxn];//ÀúÊ·°æ±¾¸ù½Úµã
8 int built(int l,int r)
9 {
10 int num=++ent;
11 if(l!=r)
12 {
13 int mid=l+((r-l)>>1);
14 L[num]=built(l,mid);
15 R[num]=built(mid+1,r);
16 }
17 return num;
18 }
19 int update(int pre,int l,int r,int x)
20 {
21 int num=++ent;
22 L[num]=L[pre];R[num]=R[pre];sum[num]=sum[pre]+1;
23 if(l!=r)
24 {
25 int mid=(l+r)>>1;
26 if(x<=mid)L[num]=update(L[pre],l,mid,x);
27 else R[num]=update(R[pre],mid+1,r,x);
28 }
29 return num;
30 }
31 int question(int u,int v,int l,int r,int k)
32 {
33 if(l==r)return hash[l];
34 int mid=l+((r-l)>>1);
35 int num=sum[L[v]]-sum[L[u]];
36 if(k<=num) return question(L[u],L[v],l,mid,k);
37 else return question(R[u],R[v],mid+1,r,k-num);
38 }
39 int main()
40 {
41 cin>>n>>m;
42 for(int i=1;i<=n;i++){cin>>a[i];hash[i]=a[i];}
43 sort(hash+1,hash+1+n);
44 int size=unique(hash+1,hash+1+n)-(hash+1);
45 type[0]=built(1,size);
46 for(int i=1;i<=n;i++)
47 {
48 int x=lower_bound(hash+1,hash+1+size,a[i])-hash;
49 type[i]=update(type[i-1],1,size,x);
50 }
51 while(m--)
52 {
53 cin>>l>>r>>k;
54 printf("%d\n",question(type[l-1],type[r],1,size,k));
55 }
56 return 0;
57 }