#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int n,q,cnt,sum[N<<5],a[N],b[N],ls[N<<5],rs[N<<5],rt[N<<5];
int build(int l,int r){
int root=++cnt;
if(l==r){
return root;
}
int mid=(l+r)/2;
ls[root]=build(1,mid);
rs[root]=build(mid+1,r);
return root;
}
int upd(int l,int r,int root,int k){
int nwroot=++cnt;
ls[nwroot]=ls[root];
rs[nwroot]=rs[root];
sum[nwroot]=sum[root]+1;
if(l==r){
return nwroot;
}
int mid=(l+r)/2;
if(k<=mid){
ls[nwroot]=upd(l,mid,ls[nwroot],k);
}else{
rs[nwroot]=upd(mid+1,r,rs[nwroot],k);
}
return nwroot;
}
int query(int fl,int fr,int l,int r,int k){
int x=sum[ls[fr]]-sum[ls[fl]];
if(l==r){
return l;
}
int mid=(l+r)/2;
if(k<=x){
return query(ls[fl],ls[fr],l,mid,k);
}else{
return query(rs[fl],rs[fr],mid+1,r,k-x);
}
}
int main(){
cin >>n>>q;
for(int i=1;i<=n;i++){
cin >>a[i];
b[i]=a[i];
}
sort(b+1,b+n+1);
int len=unique(b+1,b+n+1)-b-1;
rt[0]=build(1,len);
for(int i=1;i<=n;i++){
int x=lower_bound(b+1,b+len+1,a[i])-b;
rt[i]=upd(1,len,rt[i-1],x);
}
while(q--){
int l,r,k;
cin >>l>>r>>k;
cout <<b[query(rt[l-1],rt[r],1,len,k)]<<endl;
}
return 0;
}