#include<iostream>
#include <algorithm>
#define pb push_back
#define fi first
#define se second
#define io std::ios::sync_with_stdio(false)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int P = 1e9+7, INF = 0x3f3f3f3f;
const int maxn=1e5+10;
int ls[maxn*40],rs[maxn*40];
int sum[maxn*40];
int rt[maxn];
int cnt;
void update(int pre,int &now,int l,int r,int x)
{
now=++cnt;
sum[now]=sum[pre]+1;
ls[now]=ls[pre];
rs[now]=rs[pre];
if(l==r)
{
return ;
}
int mid=(l+r)/2;
if(x>mid)
{
update(rs[pre],rs[now],mid+1,r,x);
}
else
{
update(ls[pre],ls[now],l,mid,x);
}
}
int query(int pre,int now,int l,int r,int k)
{
int sm=sum[ls[now]]-sum[ls[pre]];
int mid=(l+r)/2;
if(l==r)
return l;
if(k<=sm)
{
return query(ls[pre],ls[now],l,mid,k);
}
else
{
return query(rs[pre],rs[now],mid+1,r,k-sm);
}
}
int id[maxn];
int a[maxn];
bool cmp(int x,int y)
{
return a[x]<a[y];
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
id[i]=i;
}
sort(id+1,id+1+n,cmp);
int _rank[maxn];
for(int i=1;i<=n;i++)
{
_rank[id[i]]=i;
}
for(int i=1;i<=n;i++)
{
update(rt[i-1],rt[i],1,n,_rank[i]);
}
while(m--)
{
int l,r,k;
cin>>l>>r>>k;
cout<<a[id[query(rt[l-1],rt[r],1,n,k)]]<<endl;
}
}