RT.
#include<bits/stdc++.h>
using namespace std;
struct node{
int ls,rs,sum;
}t[200005*(4+25)];
#define lp t[p].ls
#define rp t[p].rs
int nnode(int p){static int cnt=0;t[++cnt]=t[p];return cnt;}
void build(int &p,int l,int r){
p=nnode(p);t[p].sum=0;
if(l==r)return;
int mid=(l+r)>>1;
build(lp,l,mid);build(rp,mid+1,r);
}
void insert(int &p,int l,int r,int k){
p=nnode(p);t[p].sum++;
if(l==r)return;
int mid=(l+r)>>1;
if(k<=mid)insert(lp,l,mid,k);
else insert(rp,mid+1,r,k);
}
int query(int pl,int pr,int l,int r,int k){
if(l==r)return l;
int mid=(l+r)>>1,lsum=t[t[pr].ls].sum-t[t[pl].ls].sum;
if(k<=lsum)query(t[pl].ls,t[pr].ls,l,mid,k);
else query(t[pl].rs,t[pr].rs,mid+1,r,k-lsum);
}
int rt[200005];
int n,m,a[200005];
int b[200005],bcnt;
int main(){
std::ios::sync_with_stdio(0);cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i],b[i]=a[i];
sort(b+1,b+n+1);bcnt=unique(b+1,b+n+1)-b-1;
build(rt[0],1,bcnt);
for(int i=1;i<=n;i++)
insert(rt[i]=rt[i-1],1,bcnt,lower_bound(b+1,b+bcnt+1,a[i])-b);
for(int i=1,l,r,k;i<=m;i++){
cin>>l>>r>>k;
cout<<b[query(rt[l-1],rt[r],1,bcnt,k)]<<endl;
}
return 0;
}