#include <bits/stdc++.h>
using namespace std;
#define int long long
#define vi vector<int>
#define fi first
#define se second
#define pb push_back
#define ii pair<int , int>
#define pq priority_queue
#define iii pair<int , pair<int , int>>
#define fo(i,l,r) for(int i=l;i<=r;i++)
#define fod(i,r,l) for(int i=r;i>=l;i--)
#define fill(f,x) memset(f,x,sizeof(f))
#define NAME "file"

const int N = 3e5 + 5, mod = 1e9 + 7;
int n , q , a[N] , bit[N] , l[N] , r[N] , k[N] , L[N] , R[N] , ans[N] , val[N];
vector <int> dat[N] , qr[N];

struct time
{
    int l , r , x;
} td[N];


void upd(int x, int v) 
{
	for (; x <= n; x += x & -x) bit[x] += v;
}

int get(int x) 
{
	int res = 0;
	for (; x >= 1; x &= x - 1) res += bit[x];
	return res;
}



signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);  cout.tie(0);
    //freopen(NAME".INP" , "r" , stdin);
    //freopen(NAME".OUT" , "w" , stdout);

    cin >> n >> q;
    map <int , int> mp;
    fo(i, 1, n)
    {
        cin >> a[i];
        mp[a[i]] = 1;
    }
    int ord = 0;
    for (auto e : mp)
    {
        ord++;
        val[ord] = e.fi;
        mp[e.fi] = ord;
    }
    fo(i, 1, n)
    {
        a[i] = mp[a[i]];
        dat[a[i]].push_back(i);
    }

    fo(i, 1, q)
        cin >> l[i] >> r[i] >> k[i];

    //

    fo(i, 1, q)
    {
        L[i] = 1;
        R[i] = ord;
        ans[i] = -1;
    }

    bool run = 1;
    while (run)
    {
        run = 0;
        
        fo(i, 1, q)
        if (L[i] <= R[i])
        {
            run = 1;
            qr[(L[i] + R[i]) / 2].push_back(i);
        }

        fo(x, 1, ord)
        {
            for (auto pos : dat[x])
                upd(pos , 1);

            for (auto i : qr[x])
            {
                if (get(r[i]) - get(l[i] - 1) >= k[i])
                {
                    ans[i] = val[x];
                    R[i] = x - 1;
                }  
                else
                    L[i] = x + 1;
            }
        }

        fo(i, 1, n) bit[i] = 0;
        fo(i, 1, ord) qr[i].clear();
    }

    fo(i, 1, q)
        cout << ans[i] << '\n';
}
// haronnee_