#include<bits/stdc++.h>
#define mid (l+r)/2
#define MM 100010
#define LOG 10
using namespace std;
int x,y,z,t[MM],L[MM*LOG],R[MM*LOG],sum[MM*LOG],a[MM],b[MM],n,m,q,tot;
int build(int l,int r)
{
int rt=++tot;
if(l<r)
{
L[rt]=build(1,mid);
R[rt]=build(mid+1,r);
}
return rt;
}
int updata(int pre,int l,int r,int x)
{
int rt=++tot;
L[rt]=L[pre],R[rt]=R[pre],sum[rt]=sum[pre]+1;
if(r>l)
{
if(x<=mid)
L[rt]=updata(L[pre],l,mid,x);
else
R[rt]=updata(R[pre],mid+1,r,x);
}
return rt;
}
int query(int rt1,int rt2,int l,int r,int k)
{
if(l==r)return l;
int x=sum[L[rt2]]-sum[L[rt1]];
if(x>=k)return query(L[rt1],L[rt2],l,mid,k);
else query(R[rt1],R[rt2],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);
m=unique(b+1,b+n+1)-b-1;
t[0]=build(1,m);
for(int i=1;i<=n;i++)
{
a[i]=lower_bound(b+1,b+m+1,a[i])-b;
t[i]=updata(t[i-1],1,m,a[i]);
}
while(q--)
{
cin>>x>>y>>z;
cout<<b[query(t[x-1],t[y],1,m,z)]<<endl;
}
return 0;
}