#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N=2e5+10,M=4e6+10;
int n,q,m,a[N],ls[M],rs[M],sum[M],b[N],rt[N],cnt;
int build(int l,int r){
int x=++cnt;
if(l<r){
int mid=(l+r)>>1;
ls[x]=build(l,mid);
rs[x]=build(mid+1,r);
}
return x;
}
int add(int pre,int l,int r,int p){
int x=++cnt;
ls[x]=ls[pre],rs[x]=rs[pre],sum[x]=sum[pre]+1;
if(l<r){
int mid=(l+r)>>1;
if(p<=mid) ls[x]=add(ls[pre],l,mid,p);
else rs[x]=add(rs[pre],mid+1,r,p);
}
return x;
}
int query(int u,int v,int l,int r,int p){
if(l==r) return l;
int mid=(l+r)>>1,x=sum[ls[v]]-sum[ls[u]];
if(x>=p) return query(ls[u],ls[v],l,mid,p);
else return query(rs[u],rs[v],mid+1,r,p-x);
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>q;
for(int i=1;i<=n;i++) cin>>a[i],b[i]=a[i];
sort(b+1,b+n+1);
m=unique(b+1,b+n+1)-b-1;
rt[0]=build(1,m);
for(int i=1;i<=n;i++){
int k=lower_bound(b+1,b+m+1,a[i])-b;
rt[i]=add(rt[i-1],1,m,k);
}
while(q--){
int l,r,k;
cin>>l>>r>>k;
cout<<b[query(rt[l-1],rt[r],1,m,k)]<<endl;
}
return 0;
}