#include<bits/stdc++.h>
using namespace std;
#define int long long
#define mid ((l+r)/2)
struct node
{
int lc,rc,num;
}a[11451419];
int n,m,t1,t2,t3,b[114514],root[114514],len;
int lsh[114514];
unordered_map<int,int> lshm;
void push_up(int k)
{
a[k].num=a[a[k].lc].num+a[a[k].rc].num;
}
void build(int k,int dyk,int l,int r,int q)
{
if(r<l)return;
if(l==r)
{
a[k].num+=1;
return;
}
if(q<=mid)
{
a[k].rc=a[dyk].rc;
a[k].lc=++len;
build(a[k].lc,a[dyk].lc,l,mid,q);
push_up(k);
}
else
{
a[k].lc=a[dyk].lc;
a[k].rc=++len;
build(a[k].rc,a[dyk].rc,mid+1,r,q);
push_up(k);
}
}
int qwery(int k,int dyk,int l,int r,int q)
{
if(l==r)return l;
if(q<=a[a[k].lc].num-a[a[dyk].lc].num)
{
return qwery(a[k].lc,a[dyk].lc,l,mid,q);
}
else
{
return qwery(a[k].rc,a[dyk].rc,mid+1,r,q-(a[a[k].lc].num-a[a[dyk].lc].num));
}
}
signed main()
{
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;++i)
{
scanf("%lld",&t1);
lsh[i]=t1;
b[i]=t1;
}
sort(lsh+1,lsh+1+n);
for(int i=1;i<=n;++i)
{
lshm[lsh[i]]=i;
}
for(int i=1;i<=n;++i)
{
root[i]=++len;
build(root[i],root[i-1],1,n,lshm[b[i]]);
}
for(int i=1;i<=m;++i)
{
scanf("%lld%lld%lld",&t1,&t2,&t3);
printf("%lld\n",lsh[qwery(root[t2],root[t1-1],1,n,t3)]);
}
return 0;
}