#include <iostream>
#include <vector>
#include <set>
using namespace std;
struct SegmentTreeNode {
int start;
int end;
set<int> elements;
SegmentTreeNode* left;
SegmentTreeNode* right;
};
SegmentTreeNode* buildSegmentTree(vector<int>& a, int start, int end) {
if (start > end) {
return nullptr;
}
SegmentTreeNode* node = new SegmentTreeNode();
node->start = start;
node->end = end;
node->left = nullptr;
node->right = nullptr;
if (start == end) {
node->elements.insert(a[start]);
return node;
}
int mid = (start + end) / 2;
node->left = buildSegmentTree(a, start, mid);
node->right = buildSegmentTree(a, mid + 1, end);
for (int element : node->left->elements) {
node->elements.insert(element);
}
for (int element : node->right->elements) {
node->elements.insert(element);
}
return node;
}
bool querySegmentTree(SegmentTreeNode* node, int l, int r, int x) {
if (node == nullptr) {
return false;
}
if (l <= node->start && r >= node->end) {
return node->elements.count(x) > 0;
}
if (l > node->end || r < node->start) {
return false;
}
bool leftResult = querySegmentTree(node->left, l, r, x);
bool rightResult = querySegmentTree(node->right, l, r, x);
return leftResult || rightResult;
}
int main() {
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
int n, q;
cin >> n >> q;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
SegmentTreeNode* root = buildSegmentTree(a, 0, n - 1);
for (int i = 0; i < q; i++) {
int l, r, x;
cin >> l >> r >> x;
bool result = querySegmentTree(root, l - 1, r - 1, x);
cout << (result ? "Yes" : "No") << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c2V0PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBTZWdtZW50VHJlZU5vZGUgewogICAgaW50IHN0YXJ0OwogICAgaW50IGVuZDsKICAgIHNldDxpbnQ+IGVsZW1lbnRzOwogICAgU2VnbWVudFRyZWVOb2RlKiBsZWZ0OwogICAgU2VnbWVudFRyZWVOb2RlKiByaWdodDsKfTsKClNlZ21lbnRUcmVlTm9kZSogYnVpbGRTZWdtZW50VHJlZSh2ZWN0b3I8aW50PiYgYSwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpZiAoc3RhcnQgPiBlbmQpIHsKICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgIH0KCiAgICBTZWdtZW50VHJlZU5vZGUqIG5vZGUgPSBuZXcgU2VnbWVudFRyZWVOb2RlKCk7CiAgICBub2RlLT5zdGFydCA9IHN0YXJ0OwogICAgbm9kZS0+ZW5kID0gZW5kOwogICAgbm9kZS0+bGVmdCA9IG51bGxwdHI7CiAgICBub2RlLT5yaWdodCA9IG51bGxwdHI7CgogICAgaWYgKHN0YXJ0ID09IGVuZCkgewogICAgICAgIG5vZGUtPmVsZW1lbnRzLmluc2VydChhW3N0YXJ0XSk7CiAgICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgaW50IG1pZCA9IChzdGFydCArIGVuZCkgLyAyOwogICAgbm9kZS0+bGVmdCA9IGJ1aWxkU2VnbWVudFRyZWUoYSwgc3RhcnQsIG1pZCk7CiAgICBub2RlLT5yaWdodCA9IGJ1aWxkU2VnbWVudFRyZWUoYSwgbWlkICsgMSwgZW5kKTsKCiAgICBmb3IgKGludCBlbGVtZW50IDogbm9kZS0+bGVmdC0+ZWxlbWVudHMpIHsKICAgICAgICBub2RlLT5lbGVtZW50cy5pbnNlcnQoZWxlbWVudCk7CiAgICB9CiAgICBmb3IgKGludCBlbGVtZW50IDogbm9kZS0+cmlnaHQtPmVsZW1lbnRzKSB7CiAgICAgICAgbm9kZS0+ZWxlbWVudHMuaW5zZXJ0KGVsZW1lbnQpOwogICAgfQoKICAgIHJldHVybiBub2RlOwp9Cgpib29sIHF1ZXJ5U2VnbWVudFRyZWUoU2VnbWVudFRyZWVOb2RlKiBub2RlLCBpbnQgbCwgaW50IHIsIGludCB4KSB7CiAgICBpZiAobm9kZSA9PSBudWxscHRyKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChsIDw9IG5vZGUtPnN0YXJ0ICYmIHIgPj0gbm9kZS0+ZW5kKSB7CiAgICAgICAgcmV0dXJuIG5vZGUtPmVsZW1lbnRzLmNvdW50KHgpID4gMDsKICAgIH0KCiAgICBpZiAobCA+IG5vZGUtPmVuZCB8fCByIDwgbm9kZS0+c3RhcnQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgYm9vbCBsZWZ0UmVzdWx0ID0gcXVlcnlTZWdtZW50VHJlZShub2RlLT5sZWZ0LCBsLCByLCB4KTsKICAgIGJvb2wgcmlnaHRSZXN1bHQgPSBxdWVyeVNlZ21lbnRUcmVlKG5vZGUtPnJpZ2h0LCBsLCByLCB4KTsKCiAgICByZXR1cm4gbGVmdFJlc3VsdCB8fCByaWdodFJlc3VsdDsKfQoKaW50IG1haW4oKSB7CiAgICAvL2ZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwogICAgLy9mcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwogICAgaW50IG4sIHE7CiAgICBjaW4gPj4gbiA+PiBxOwoKICAgIHZlY3RvcjxpbnQ+IGEobik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGNpbiA+PiBhW2ldOwogICAgfQoKICAgIFNlZ21lbnRUcmVlTm9kZSogcm9vdCA9IGJ1aWxkU2VnbWVudFRyZWUoYSwgMCwgbiAtIDEpOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcTsgaSsrKSB7CiAgICAgICAgaW50IGwsIHIsIHg7CiAgICAgICAgY2luID4+IGwgPj4gciA+PiB4OwoKICAgICAgICBib29sIHJlc3VsdCA9IHF1ZXJ5U2VnbWVudFRyZWUocm9vdCwgbCAtIDEsIHIgLSAxLCB4KTsKICAgICAgICBjb3V0IDw8IChyZXN1bHQgPyAiWWVzIiA6ICJObyIpIDw8IGVuZGw7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K