#include <iostream>
#include <bits/extc++.h>
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
const int N = 2e5 + 5, B = 600;
struct Zhangjc {
int l, r, k, id;
} q[N];
int n, m, a[N], ans[N];
tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> t;
bool cmp( Zhangjc &i, Zhangjc &j ) {
int pos1 = i.l / B, pos2 = j.l / B;
return pos1 < pos2 || pos1 == pos2 && i.r < j.r;
}
int main() {
ios :: sync_with_stdio(0), cin.tie(0);
cin >> n >> m;
for ( int i = 1; i <= n; cin >> a[i++] ) {
}
for ( int i = 1; i <= m; ++i ) {
cin >> q[i].l >> q[i].r >> q[i].k;
q[i].id = i;
}
sort ( q + 1, q + m + 1, cmp );
int l = 1, r = 0;
for ( int i = 1; i <= m; ++i ) {
while (r < q[i].r) t.insert(a[++r]);
while (l > q[i].l) t.insert(a[--l]);
while (l < q[i].l) t.erase(t.upper_bound(a[l++]));
while (r > q[i].r) t.erase(t.upper_bound(a[r--]));
ans[q[i].id] = *t.find_by_order(q[i].k - 1);
}
for ( int i = 1; i <= m; ++i ) {
cout << ans[i] << '\n';
}
return 0;
}