#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=3e5+10;
int n,rt,tot,siz[N],cnt[N],val[N],son[N][2],fa[N],arr[N],m;
struct ask
{
int l,r,k;
}asks[N];
bool cmp(ask a1,ask a2)
{
return a1.l<a2.l;
}
void pushup(int x)
{
siz[x]=siz[son[x][0]]+siz[son[x][1]]+cnt[x];
return ;
}
int getopt(int x)
{
return son[fa[x]][1]==x;
}
void cle(int x)
{
son[x][0]=son[x][1]=cnt[x]=val[x]=siz[x]=0;
return ;
}
void rotate(int x)
{
int y=fa[x],z=fa[y],opt=getopt(x);
son[y][opt]=son[x][opt^1];
fa[son[y][opt]]=y;
son[x][opt^1]=y;
fa[x]=z;
if(z)
{
son[z][getopt(y)]=x;
}
fa[y]=x;
pushup(x);
pushup(y);
return ;
}
void splay(int x)
{
for(int f;f=fa[x];rotate(x))
{
if(fa[f])
{
if(getopt(x)==getopt(f))
{
rotate(f);
}
else
{
rotate(x);
}
}
}
rt=x;
return ;
}
void insert(int x)
{
if(!rt)
{
rt=++tot;
siz[tot]=cnt[tot]=1;
val[tot]=x;
return ;
}
int now=rt,f=0;
while(1)
{
if(val[now]==x)
{
cnt[now]++;
pushup(now);
pushup(f);
splay(now);
break;
}
f=now;
now=son[now][x>val[now]];
if(!now)
{
fa[++tot]=f;
siz[tot]=cnt[tot]=1;
son[f][x>val[f]]=tot;
val[tot]=x;
pushup(f);
splay(tot);
break;
}
}
return ;
}
int kth(int k)
{
int now=rt;
while(k)
{
if(k<=siz[son[now][0]]) now=son[now][0];
else
{
int tmp=siz[son[now][0]]+cnt[now];
if(k<=tmp) return val[now];
k-=tmp;
now=son[now][1];
}
}
return val[now];
}
int askrank(int k)
{
int now=rt,res=0;
while(now)
{
if(k<val[now]) now=son[now][0];
else
{
res+=siz[son[now][0]];
if(k==val[now])
{
splay(now);
return res+1;
}
res+=cnt[now];
now=son[now][1];
}
}
return res+1;
}
int pre(int k)
{
int now=son[rt][0];
while(son[now][1]) now=son[now][1];
return now;
}
int nxt(int k)
{
int now=son[rt][1];
while(son[now][0]) now=son[now][0];
return now;
}
void del(int x)
{
int rk=askrank(x);
if(cnt[rt]>1)
{
cnt[rt]--;
pushup(rt);
return ;
}
if(!son[rt][0]&&!son[rt][1])
{
cle(rt);
rt=0;
return ;
}
if(!son[rt][0])
{
int oldrt=rt;
rt=son[rt][1];
fa[rt]=0;
cle(oldrt);
return ;
}
if(!son[rt][1])
{
int oldrt=rt;
rt=son[rt][0];
fa[rt]=0;
cle(oldrt);
return ;
}
int mx=pre(x),oldrt=rt;
splay(mx);
son[rt][1]=son[oldrt][1];
fa[son[oldrt][1]]=rt;
cle(oldrt);
pushup(rt);
return ;
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>arr[i];
for(int i=1;i<=m;i++)
{
cin>>asks[i].l>>asks[i].r>>asks[i].k;
}
sort(asks+1,asks+m+1,cmp);
for(int i=1;i<=m;i++)
{
if(asks[i-1].r>=asks[i].l)
{
for(int j=asks[i-1].l;j<asks[i].l;j++) del(arr[j]);
for(int j=asks[i-1].r+1;j<=asks[i].r;j++) insert(arr[j]);
}
else
{
for(int j=asks[i-1].l;j<=asks[i-1].r;j++) del(arr[j]);
for(int j=asks[i].l;j<=asks[i].r;j++) insert(arr[j]);
}
cout<<kth(asks[i].k)<<endl;
}
return 0;
}