#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+5;
int n,m;
int a[N],b[N];
struct Persistent_segment_tree{
int sumcnt;
int root[N];
struct menber{
int sum;
int ls,rs;
};menber node[N<<5];
int build_node(int o)
{
sumcnt++;
node[sumcnt]=node[o];
node[sumcnt].sum=node[o].sum+1;
return sumcnt;
}
int build_tree(int l, int r)
{
int o=++sumcnt;
if(l==r)
{
node[o].sum=0;
return o;
}
int mid=(l+r)>>1;
node[o].ls=build_tree(l,mid);
node[o].rs=build_tree(mid+1,r);
return o;
}
int update(int father,int l,int r,int x)
{
int o=build_node(father);
if(l==r)
{
return o;
}
int mid=(l+r)>>1;
if(x<=mid) node[o].ls=update(node[father].ls,l,mid,x);
else node[o].rs=update(node[father].rs,mid+1,r,x);
return o;
}
int query(int u,int v,int l,int r,int k)
{
if(l==r)
{
return b[l];
}
int mid=(l+r)>>1;
int num=node[node[v].ls].sum-node[node[u].ls].sum;
if(num>=k) return query(node[u].ls,node[v].ls,l,mid,k);
else return query(node[u].ls,node[v].ls,mid+1,r,k-num);
}
} PST;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;++i)
cin>>a[i],b[i]=a[i];
sort(b+1, b+1+n);
int sumdiff=unique(b+1, b+1+n)-b-1;
PST.root[0]=PST.build_tree(1,sumdiff);
for(int i=1;i<=n;i++)
{
int t=lower_bound(b+1,b+1+sumdiff,a[i])-b;
PST.root[i]=PST.update(PST.root[i-1],1,sumdiff,t);
}
for(int i=1,l,r,k;i<=m;++i)
{
cin>>l>>r>>k;
cout<<PST.query(PST.root[l-1],PST.root[r],1,sumdiff,k)<<endl;
}
return 0;
}