#include<bits/stdc++.h>
using namespace std;
#define int long long
#define _n "\n"
const int mod=1e9+7;
const int inf=1e13;
int max(int A,int B){return (A>B)?A:B;}
int min(int A,int B){return (A<B)?A:B;}
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
template<class T>
void put(T print){cout<<print;}
const int N=1e6+10;
int sum[N],cnt[N],a[N],len,ans[N];
struct query{int l,r,k,id;}b[N];
bool cmp(query A,query B){
if(A.l/len==B.l/len) return A.r<B.r;
else return A.l/len<B.l/len;
}
void add(int i){
sum[cnt[a[i]]]--;
cnt[a[i]]++;
sum[cnt[a[i]]]++;
}
void del(int i){
sum[cnt[a[i]]]--;
cnt[a[i]]--;
sum[cnt[a[i]]]++;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int n,m;cin>>n>>m;
len=sqrt(n);
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=m;i++){
cin>>b[i].l>>b[i].r>>b[i].k;
b[i].id=i;
}sort(b+1,b+m+1,cmp);
int l=1,r=0;
for(int i=1;i<=m;i++){
while(b[i].l<l) add(--l);
while(b[i].l>l) del(l++);
while(b[i].r>r) add(++r);
while(b[i].r<r) del(r--);
int t=0,res=-1;
for(int j=1;j<=n;j++){
if(sum[j]) t++;
if(t==b[i].k){res=j;break;}
}ans[b[i].id]=res;
}for(int i=1;i<=m;i++) cout<<ans[i]<<_n;
return 0;
}