#include <bits/stdc++.h>

using namespace std;

 const int logn = 32, maxn = logn * 2e5 + 42;
int cnt[maxn], to[maxn][2];
int rt[maxn];
int sz = 1;

void copy(int x)
 {
    to[sz][0] = to[x][0];
    to[sz][1] = to[x][1];
    cnt[sz] = cnt[x] + 1;
 }

void upd(int v, unsigned n)
 {
    n ^= 1u << logn - 1;
    v++;
    copy(rt[v - 1]);
    v = rt[v] = sz++;
    for(int i = logn - 1; i >= 0; i--)
    {
        int c = (n >> i) & 1;
        copy(to[v][c]);
        v = to[v][c] = sz++;
    }
 }

unsigned find_by_order(int l, int r, int k)
 {
    l = rt[l];
    r = rt[r];
    unsigned ans = 0;
    for(int i = logn - 1; i >= 0; i--)
    {
    	int c = 0;
        if(cnt[to[r][0]] - cnt[to[l][0]] < k)
        {
            k -= cnt[to[r][0]] - cnt[to[l][0]];
            ans |= 1u << i;
            c = 1;
        }
        l = to[l][c];
        r = to[r][c];
    }
    return ans;
 }

 main()
 {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n, m;
    cin >> n >> m;
    int nw[n];
    for(int i = 0; i < n; i++)
        cin >> nw[i];
    for(int i = 0; i < n; i++)
        upd(i, nw[i]);
    while(m--)
    {
        int l, r, k;
        cin >> l >> r >> k;
        cout << (int)(find_by_order(l - 1, r, k) ^ (1u << logn - 1)) << "\n";
    }
 }
