#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int a[200010],b[200010],lc[2000005],rc[2000005],root[200005],sum[2000005],cnt=0; void add(int l,int r,int x,int &cur,int cur1){ cur=++cnt; lc[cur]=lc[cur1]; rc[cur]=rc[cur1]; sum[cur]=sum[cur1]+1; if(l==r)return; int mid=l+r>>1; if(x<=mid)add(l,mid,x,lc[cur],lc[cur1]); else add(mid+1,r,x,rc[cur],rc[cur1]); } int query(int l,int r,int cur,int cur1,int k){ if(l==r)return l; int mid=l+r>>1; int t=sum[lc[cur]]-sum[lc[cur1]]; if(t>=k)return query(l,mid,lc[cur],lc[cur1],k); else return query(mid+1,r,rc[cur],rc[cur1],k-t); } int main(){ int i,j,n,m; scanf("%d%d",&n,&m); for(i=1;i<=n;i++){ scanf("%d",&a[i]); b[i]=a[i]; } sort(b+1,b+1+n); for(i=1;i<=n;i++){ a[i]=lower_bound(b+1,b+1+n,a[i])-b; add(1,n,a[i],root[i],root[i-1]); } for(i=1;i<=m;i++){ int l,r,k; scanf("%d%d%d",&l,&r,&k); printf("%d\n",b[query(1,n,root[r],root[l-1],k)]); } return 0; }