#include <bits/stdc++.h>
using namespace std;
int c[200005],ans[210005];
int n,m;
struct node{int data,id;}b[200005],a[200005];
struct question{int l,r,k,address;}q[200005],lq[200005],rq[200005];
int lowbit(int x){return x&(-x);}
int add(int x,int k){
while(x <= n)c[x]+=k,x+=lowbit(x);
return 0;
}
int get(int x){
int total=0;
while(x > 0)total+=c[x],x-=lowbit(x);
return total;
}
int cmp(node A,node B){
if(A.data != B.data)
return A.data<B.data;
return A.id<B.id;
}
int solve(int cl,int cr,int l, int r){
if(cl > cr)return 0;
if(l == r){
for (int i = cl ; i <= cr ; i++)
ans[q[i].address]=b[l].data;
return 0;
}
int mid=(l+r)/2,t1=0,t2=0;
for (int i = 1 ; i <= n ; i ++)
if(a[i].id <= mid)add(i,1);
for (int i = cl ; i <= cr ; i ++){
if(get(q[i].r)-get(q[i].l-1)>=q[i].k)
t1++,lq[t1]=q[i];
else
t2++,rq[t2]=q[i];
}
for (int i = 1 ; i <= n ; i ++)
if(a[i].id <= mid)add(i,-1);
for (int i = cl; i <= cl+t1-1 ; i ++)
q[i]=lq[i-cl+1];
for (int i = cl+t1 ; i <= cr ; i ++)
q[i]=rq[i-cl-t1+1];
solve(cl,cl+t1-1,l,mid),solve(cl+t1,cr,mid+1,r);
}
int main(){
cin>>n>>m;
for (int i = 1 ; i <= n ; i ++)
cin>>a[i].id,b[i].data=a[i].id,b[i].id=i,a[i].data=a[i].id;
sort(b+1,b+1+n,cmp);
for (int i = 1 ; i <= n ; i ++)
a[b[i].id].id=i;
for (int i = 1 ; i <= m ; i ++)
cin>>q[i].l>>q[i].r>>q[i].k,q[i].address=i;
solve(1,m,0,n);
for (int i = 1 ; i <= m ; i ++)
cout<<ans[i]<<endl;
return 0;
}