#include<bits/stdc++.h>
using namespace std;
#define F(a,b,c) for(int a=b;a<=c;++a)
int R(){int x=0,f=1;char c=getchar();for(;c<'0'||c>'9';c=getchar()) if(c=='-') f=-1;
for(;c>='0'&&c<='9';c=getchar()) x=(x<<3)+(x<<1)+(c^48);return x*f;}
const int N = 2e5+10;
const int L = 20;
struct TREE{int ch[2],num;}t[N*L];
int n,m,trcnt,T[N],X[N],a[N];
int Mdfy(int pr,int a,int b,int S){int x;t[x=++trcnt].num=t[pr].num+1;
if(a^b){int mid=a+b>>1,d=0;
t[x].ch[d=(S>mid)]=Mdfy(t[pr].ch[d],d?mid+1:a,d?b:mid,S);
t[x].ch[d^1]=t[pr].ch[d^1];
}return x;
}
int Qry(int l,int r,int k){int a=1,b=n;
while(a^b){
int ls=t[t[r].ch[0]].num-t[t[l].ch[0]].num,d=0,mid=a+b>>1;
l=t[l].ch[d=(ls<k)],r=t[r].ch[d],k-=d*ls;
a=d?mid+1:a,b=d?b:mid;
}return a;
}
signed main(){n=R(),m=R();
F(i,1,n) X[i]=a[i]=R();
sort(X+1,X+n+1);n=unique(X+1,X+n+1)-X-1;
F(i,1,n) T[i]=Mdfy(T[i-1],1,n,lower_bound(X+1,X+n+1,a[i])-X);
F(i,1,m){int l=R(),r=R(),k=R();
printf("%d\n",X[Qry(T[l-1],T[r],k)]);
}
return 0;
}
本地能过,洛谷IDE,测评不能