#include<bits/stdc++.h>
using namespace std;
using ll = long long;
template<typename X, typename Y>
bool chmax(X& a, Y b) { return (a < b) ? a = b, 1 : 0; }
template<typename X, typename Y>
bool chmin(X& a, Y b) { return (a > b) ? a = b, 1 : 0; }
const int N = 2e5+5;
int n, q, a[N];
struct Node {
int lc, rc, cnt;
} st[22*N];
int roots[N], nodes = 0;
int update(int p, int l, int r, int k) {
int id = ++nodes;
st[id] = st[p];
st[id].cnt++;
if (l == r) return id;
int mid = (l + r) >> 1;
if (k <= mid) st[id].lc = update(st[p].lc, l, mid, k);
else st[id].rc = update(st[p].rc, mid + 1, r, k);
return id;
}
int query(int L, int R, int l, int r, int k) {
if (l == r) return l;
int cnt = st[st[R].lc].cnt - st[st[L].lc].cnt;
int mid = (l + r) >> 1;
if (cnt >= k) return query(st[L].lc, st[R].lc, l, mid, k);
return query(st[L].rc, st[R].rc, mid + 1, r, k - cnt);
}
void solve() {
cin >> n >> q;
vector<int> vals;
for (int i = 1; i <= n; i++) {
cin >> a[i];
vals.push_back(a[i]);
}
sort(vals.begin(), vals.end());
vals.erase(unique(vals.begin(), vals.end()), vals.end());
int m = vals.size();
for (int i = 1; i <= n; i++) {
a[i] = lower_bound(vals.begin(), vals.end(), a[i]) - vals.begin() + 1;
roots[i] = update(roots[i - 1], 1, m, a[i]);
}
while (q--) {
int l, r, k; cin >> l >> r >> k;
int p = query(roots[l - 1], roots[r], 1, m, k);
cout << vals[p - 1] << '\n';
}
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int tests = 1; // cin >> tests;
while (tests--) solve();
#ifdef LOCAL
cerr << "\nTime elapsed: " << clock() << ' ms.\n';
#endif
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAp1c2luZyBsbCA9IGxvbmcgbG9uZzsKIAp0ZW1wbGF0ZTx0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgpib29sIGNobWF4KFgmIGEsIFkgYikgeyByZXR1cm4gKGEgPCBiKSA/IGEgPSBiLCAxIDogMDsgfQogCnRlbXBsYXRlPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CmJvb2wgY2htaW4oWCYgYSwgWSBiKSB7IHJldHVybiAoYSA+IGIpID8gYSA9IGIsIDEgOiAwOyB9CiAKY29uc3QgaW50IE4gPSAyZTUrNTsKIAppbnQgbiwgcSwgYVtOXTsKIApzdHJ1Y3QgTm9kZSB7CiAgICBpbnQgbGMsIHJjLCBjbnQ7Cn0gc3RbMjIqTl07CiAKaW50IHJvb3RzW05dLCBub2RlcyA9IDA7CiAKaW50IHVwZGF0ZShpbnQgcCwgaW50IGwsIGludCByLCBpbnQgaykgewogICAgaW50IGlkID0gKytub2RlczsKICAgIHN0W2lkXSA9IHN0W3BdOwogICAgc3RbaWRdLmNudCsrOwogICAgaWYgKGwgPT0gcikgcmV0dXJuIGlkOwogICAgaW50IG1pZCA9IChsICsgcikgPj4gMTsKICAgIGlmIChrIDw9IG1pZCkgc3RbaWRdLmxjID0gdXBkYXRlKHN0W3BdLmxjLCBsLCBtaWQsIGspOwogICAgZWxzZSBzdFtpZF0ucmMgPSB1cGRhdGUoc3RbcF0ucmMsIG1pZCArIDEsIHIsIGspOwogICAgcmV0dXJuIGlkOwp9CiAKaW50IHF1ZXJ5KGludCBMLCBpbnQgUiwgaW50IGwsIGludCByLCBpbnQgaykgewogICAgaWYgKGwgPT0gcikgcmV0dXJuIGw7CiAgICBpbnQgY250ID0gc3Rbc3RbUl0ubGNdLmNudCAtIHN0W3N0W0xdLmxjXS5jbnQ7CiAgICBpbnQgbWlkID0gKGwgKyByKSA+PiAxOwogICAgaWYgKGNudCA+PSBrKSByZXR1cm4gcXVlcnkoc3RbTF0ubGMsIHN0W1JdLmxjLCBsLCBtaWQsIGspOwogICAgcmV0dXJuIHF1ZXJ5KHN0W0xdLnJjLCBzdFtSXS5yYywgbWlkICsgMSwgciwgayAtIGNudCk7Cn0KIAp2b2lkIHNvbHZlKCkgewogICAgY2luID4+IG4gPj4gcTsKICAgIHZlY3RvcjxpbnQ+IHZhbHM7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgICAgICB2YWxzLnB1c2hfYmFjayhhW2ldKTsKICAgIH0KICAgIHNvcnQodmFscy5iZWdpbigpLCB2YWxzLmVuZCgpKTsKICAgIHZhbHMuZXJhc2UodW5pcXVlKHZhbHMuYmVnaW4oKSwgdmFscy5lbmQoKSksIHZhbHMuZW5kKCkpOwogICAgaW50IG0gPSB2YWxzLnNpemUoKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGFbaV0gPSBsb3dlcl9ib3VuZCh2YWxzLmJlZ2luKCksIHZhbHMuZW5kKCksIGFbaV0pIC0gdmFscy5iZWdpbigpICsgMTsKICAgICAgICByb290c1tpXSA9IHVwZGF0ZShyb290c1tpIC0gMV0sIDEsIG0sIGFbaV0pOwogICAgfQogICAgd2hpbGUgKHEtLSkgewogICAgICAgIGludCBsLCByLCBrOyBjaW4gPj4gbCA+PiByID4+IGs7CiAgICAgICAgaW50IHAgPSBxdWVyeShyb290c1tsIC0gMV0sIHJvb3RzW3JdLCAxLCBtLCBrKTsKICAgICAgICBjb3V0IDw8IHZhbHNbcCAtIDFdIDw8ICdcbic7CiAgICB9ICAgIAp9CiAKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShOVUxMKTsKIAogICAgaW50IHRlc3RzID0gMTsgLy8gY2luID4+IHRlc3RzOwogICAgd2hpbGUgKHRlc3RzLS0pIHNvbHZlKCk7CiAKICAgICNpZmRlZiBMT0NBTAogICAgY2VyciA8PCAiXG5UaW1lIGVsYXBzZWQ6ICIgPDwgY2xvY2soKSA8PCAnIG1zLlxuJzsKICAgICNlbmRpZgogICAgcmV0dXJuIDA7Cn0=