#include <iostream>
#include <vector>
#include <algorithm>
#include <memory>
struct Range {
int start, end;
bool Include(const Range& outer) const { return outer.start <= start && end <= outer.end; }
bool Exclude(const Range& outer) const { return outer.end < start || end < outer.start; }
bool IsLeaf() const { return start == end; }
int Count() const { return 1 + end - start; }
};
class Node {
public:
inline static std::vector<int> InitArray;
public:
explicit Node(Range r) : range(r) {
if (range.IsLeaf()) {
array.emplace_back(InitArray[range.start]);
return;
}
int mid = range.start + (range.end - range.start) / 2;
left = std::make_unique<Node>(Range{ range.start, mid });
right = std::make_unique<Node>(Range{ mid + 1, range.end });
array.resize(range.Count());
std::merge(left->array.begin(), left->array.end(), right->array.begin(), right->array.end(), array.begin());
}
int LessCount(const Range& query, int value) const {
if (range.Exclude(query)) return 0;
if (range.Include(query)) {
return static_cast<int>(std::lower_bound(array.begin(), array.end(), value) - array.begin());
}
return left->LessCount(query, value) + right->LessCount(query, value);
}
int GetMinimum() const { return array.front(); }
int GetMaximum() const { return array.back(); }
private:
Range range;
std::unique_ptr<Node> left;
std::unique_ptr<Node> right;
std::vector<int> array;
};
int main() {
std::cin.tie(nullptr)->sync_with_stdio(false);
int n, q;
std::cin >> n >> q;
Node::InitArray.resize(n);
for (int i = 0; i < n; i++) std::cin >> Node::InitArray[i];
Node root(Range{ 0, n - 1 });
const int minValue = root.GetMinimum();
const int maxValue = root.GetMaximum();
for (int i = 0; i < q; ++i) {
int l, r, k;
std::cin >> l >> r >> k;
const Range query{ l - 1, r - 1 };
int low = minValue;
for (int high = maxValue, mid; low < high; ) {
mid = low + (high - low) / 2;
if (root.LessCount(query, mid + 1) < k) {
low = mid + 1;
}
else {
high = mid;
}
}
std::cout << low << '\n';
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8bWVtb3J5PgoKc3RydWN0IFJhbmdlIHsKICAgIGludCBzdGFydCwgZW5kOwogICAgYm9vbCBJbmNsdWRlKGNvbnN0IFJhbmdlJiBvdXRlcikgY29uc3QgeyByZXR1cm4gb3V0ZXIuc3RhcnQgPD0gc3RhcnQgJiYgZW5kIDw9IG91dGVyLmVuZDsgfQogICAgYm9vbCBFeGNsdWRlKGNvbnN0IFJhbmdlJiBvdXRlcikgY29uc3QgeyByZXR1cm4gb3V0ZXIuZW5kIDwgc3RhcnQgfHwgZW5kIDwgb3V0ZXIuc3RhcnQ7IH0KICAgIGJvb2wgSXNMZWFmKCkgY29uc3QgeyByZXR1cm4gc3RhcnQgPT0gZW5kOyB9CiAgICBpbnQgQ291bnQoKSBjb25zdCB7IHJldHVybiAxICsgZW5kIC0gc3RhcnQ7IH0KfTsKCmNsYXNzIE5vZGUgewpwdWJsaWM6CiAgICBpbmxpbmUgc3RhdGljIHN0ZDo6dmVjdG9yPGludD4gSW5pdEFycmF5OwoKcHVibGljOgogICAgZXhwbGljaXQgTm9kZShSYW5nZSByKSA6IHJhbmdlKHIpIHsKICAgICAgICBpZiAocmFuZ2UuSXNMZWFmKCkpIHsKICAgICAgICAgICAgYXJyYXkuZW1wbGFjZV9iYWNrKEluaXRBcnJheVtyYW5nZS5zdGFydF0pOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGludCBtaWQgPSByYW5nZS5zdGFydCArIChyYW5nZS5lbmQgLSByYW5nZS5zdGFydCkgLyAyOwogICAgICAgIGxlZnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE5vZGU+KFJhbmdleyByYW5nZS5zdGFydCwgbWlkIH0pOwogICAgICAgIHJpZ2h0ID0gc3RkOjptYWtlX3VuaXF1ZTxOb2RlPihSYW5nZXsgbWlkICsgMSwgcmFuZ2UuZW5kIH0pOwogICAgICAgIGFycmF5LnJlc2l6ZShyYW5nZS5Db3VudCgpKTsKICAgICAgICBzdGQ6Om1lcmdlKGxlZnQtPmFycmF5LmJlZ2luKCksIGxlZnQtPmFycmF5LmVuZCgpLCByaWdodC0+YXJyYXkuYmVnaW4oKSwgcmlnaHQtPmFycmF5LmVuZCgpLCBhcnJheS5iZWdpbigpKTsKICAgIH0KICAgIGludCBMZXNzQ291bnQoY29uc3QgUmFuZ2UmIHF1ZXJ5LCBpbnQgdmFsdWUpIGNvbnN0IHsKICAgICAgICBpZiAocmFuZ2UuRXhjbHVkZShxdWVyeSkpIHJldHVybiAwOwogICAgICAgIGlmIChyYW5nZS5JbmNsdWRlKHF1ZXJ5KSkgewogICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdGQ6Omxvd2VyX2JvdW5kKGFycmF5LmJlZ2luKCksIGFycmF5LmVuZCgpLCB2YWx1ZSkgLSBhcnJheS5iZWdpbigpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxlZnQtPkxlc3NDb3VudChxdWVyeSwgdmFsdWUpICsgcmlnaHQtPkxlc3NDb3VudChxdWVyeSwgdmFsdWUpOwogICAgfQogICAgaW50IEdldE1pbmltdW0oKSBjb25zdCB7IHJldHVybiBhcnJheS5mcm9udCgpOyB9CiAgICBpbnQgR2V0TWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIGFycmF5LmJhY2soKTsgfQoKcHJpdmF0ZToKICAgIFJhbmdlIHJhbmdlOwogICAgc3RkOjp1bmlxdWVfcHRyPE5vZGU+IGxlZnQ7CiAgICBzdGQ6OnVuaXF1ZV9wdHI8Tm9kZT4gcmlnaHQ7CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IGFycmF5Owp9OwoKaW50IG1haW4oKSB7CiAgICBzdGQ6OmNpbi50aWUobnVsbHB0ciktPnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBpbnQgbiwgcTsKICAgIHN0ZDo6Y2luID4+IG4gPj4gcTsKCglOb2RlOjpJbml0QXJyYXkucmVzaXplKG4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHN0ZDo6Y2luID4+IE5vZGU6OkluaXRBcnJheVtpXTsKCiAgICBOb2RlIHJvb3QoUmFuZ2V7IDAsIG4gLSAxIH0pOwogICAgY29uc3QgaW50IG1pblZhbHVlID0gcm9vdC5HZXRNaW5pbXVtKCk7CiAgICBjb25zdCBpbnQgbWF4VmFsdWUgPSByb290LkdldE1heGltdW0oKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHE7ICsraSkgewogICAgICAgIGludCBsLCByLCBrOwogICAgICAgIHN0ZDo6Y2luID4+IGwgPj4gciA+PiBrOwogICAgICAgIGNvbnN0IFJhbmdlIHF1ZXJ5eyBsIC0gMSwgciAtIDEgfTsKCiAgICAgICAgaW50IGxvdyA9IG1pblZhbHVlOwogICAgICAgIGZvciAoaW50IGhpZ2ggPSBtYXhWYWx1ZSwgbWlkOyBsb3cgPCBoaWdoOyApIHsKICAgICAgICAgICAgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cpIC8gMjsKICAgICAgICAgICAgaWYgKHJvb3QuTGVzc0NvdW50KHF1ZXJ5LCBtaWQgKyAxKSA8IGspIHsKICAgICAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBoaWdoID0gbWlkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHN0ZDo6Y291dCA8PCBsb3cgPDwgJ1xuJzsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==