#include<bits/stdc++.h>
using namespace std;
const int N=2e5+100;
struct node{int l,r,num,k;}q[N];
int a[N],n,m,sq,st[N],ed[N],num[N],c[N],bel[N],b[N];
void add(int x){
int xx=lower_bound(a+1,a+n+1,x)-a;
c[xx]++,num[bel[xx]]++;}
void del(int x){
int xx=lower_bound(a+1,a+n+1,x)-a;
c[xx]--,num[bel[xx]]--;}
int ask(int k){
for(int i=1;i<=sq;i++){
if(num[i]>=k){
for(int j=st[i];j<=ed[i];j++){
k-=c[j];if(k<=0) return a[j];}
}
k-=num[i];
}
return -1;
}
vector<pair<int,int> >Ans;
bool cmp(node x,node y){
if((x.l/sq)==(y.l/sq)){
if((x.l/sq)&1)
return x.r<y.r;
else return x.r>y.r;
}
return (x.l/sq)<(y.l/sq);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){cin>>a[i];b[i]=a[i];}
for(int i=1;i<=m;i++){cin>>q[i].l>>q[i].r>>q[i].k;q[i].num=i;}
sq=sqrt(n);sort(q+1,q+m+1,cmp);
sort(a+1,a+n+1);n=unique(a+1,a+n+1)-a-1;
sq=sqrt(n);
for(int i=1;i<=sq;i++) st[i]=ed[i-1]+1,ed[i]=i*sq;
ed[sq]=n;
for(int i=1;i<=sq;i++)
for(int j=st[i];j<=ed[i];j++) bel[j]=i;
int l=1,r=0;
for(int i=1;i<=m;i++){
while(l>q[i].l) add(b[--l]);
while(r<q[i].r) add(b[++r]);
while(l<q[i].l) del(b[l++]);
while(r>q[i].r) del(b[r--]);
Ans.push_back(make_pair(q[i].num,ask(q[i].k)));
}
sort(Ans.begin(),Ans.end());
for(auto i:Ans) cout<<i.second<<'\n';
}