#include<iostream>
#include<algorithm>
using namespace std;
const int N = 5555;
int seg[32][N];
int lesscnt[32][N];
int sa[N];
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
void build(int d, int l, int r, int rt)
{
if(l==r)
return;
int i, j;
int m = (l + r) >> 1;
int same = r - l + 1, mv = sa[m];
for(i=l;i<=r;i++)
{
if(seg[d][i]<mv)
same--;
}
int ls = l, rs = m + 1, scnt = 0;//re should be m + 1 instead of m;
for(i=l;i<=r;i++)
{
if(i==l)
lesscnt[d][i] = 0;
else
lesscnt[d][i] = lesscnt[d][i-1];
if(seg[d][i]<mv)
{
seg[d+1][ls++] = seg[d][i];
lesscnt[d][i]++;
}
else if(seg[d][i]>mv)
seg[d+1][rs++] = seg[d][i];
else
{
if(scnt<same)
{
seg[d+1][ls++] = seg[d][i];
lesscnt[d][i]++;
scnt++;
}
else
seg[d+1][rs++] = seg[d][i];
}
}
printf("f:%d\n", d + 1);
for(i=l;i<=r;i++)
printf("%3d", seg[d+1][i]);
puts("");
++d;
build(d, lson);
build(d, rson);
}
int query(int cnt, int d, int lv, int rv, int l, int r, int rt)
{
if(l==r)
return seg[d][l];
int m = (l + r) >> 1;
int s = lesscnt[d][rv] - lesscnt[d][lv - 1];
int ss = lesscnt[d][lv - 1] - lesscnt[d][l];
if(cnt <= s)
{
return query(cnt, d+1, lv + ss, rv + ss + s - 1, lson);
}
else
{
int bb = lv - lesscnt[d][lv];
int b = rv - s;
return query(cnt - s, d+1, m + bb, m+bb+b, rson);
}
}
int main()
{
freopen("in.txt", "r", stdin);
int n, m, i, j;
scanf("%d%d", &n, &m);
for(i=0;i<n;i++)
{
scanf("%d", &seg[0][i]);
sa[i] = seg[0][i];
}
sort(sa, sa + n);
build(0, 0, n - 1, 1);
int a, b, c;
while(m--)
{
scanf("%d%d%d", &a, &b, &c);
printf("%d\n", query(c, 0, a - 1, b - 1, 0, n - 1, 1));
}
return 0;
}