```#include<bits/stdc++.h>
using namespace std;
const int N=1e5*2+10;
int a[N],pos,root[N],ls[N];
struct Node{
int l,r,v;
}ns[40*N];
void edit(int l,int r,int old,int &now,int x)
{
now=++pos;
ns[now]=ns[old];
ns[now].v++;
if(l==r)
{
return;
}
int mid=(l+r)/2;
if(x<=mid)
{
edit(l,mid,ns[old].l,ns[now].l,x);
}
else
edit(mid+1,r,ns[old].r,ns[now].r,x);
}
int find_k(int l,int r,int old, int now,int k)
{
if(l==r)
{
return l;
}
int mid=(l+r)/2;
int left=ns[ns[now].l].v-ns[ns[old].l].v;
if(k<=left)
{
return find_k(l,mid,ns[old].l,ns[now].l,k);
}
else
return find_k(mid+1,r,ns[old].r,ns[now].r,k-left);
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
ls[i]=a[i];
}
sort(ls+1,ls+n+1);
int sz=unique(ls+1,ls+n+1)-ls-1;
for(int i=1;i<=n;i++)
{
edit(1,sz,root[i-1],root[i],lower_bound(ls+1,ls+n+1,a[i])-ls);
}
for(int i=1;i<=m;i++)
{
int l,r,k;
cin>>l>>r>>k;
cout<<ls[find_k(1,sz,root[l-1],root[r],k)]<<endl;
}
return 0;
}