#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 500005;
int n, k, a[MAX_N], p[MAX_N], ip[MAX_N];
int numQuery, l[MAX_N], r[MAX_N];
bool ans[MAX_N];
vector<int> ids[MAX_N];
/// xu li offline cho nen phai luu lai cau hoi
map<int, int> mark[MAX_N];
/// lưu lại thông tin
/// mark[i][j] có nghĩa là vị trí gần nhất
/// có giá trị bằng j mà ta có thể với tới.
/// với tới có nghĩa là xóa được hoàn toàn giữa chúng
map<int, bool> reach[MAX_N];
/// reach[i][j] = true. nếu có thể xóa được đoạn [i, j]
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
freopen("XMAS.inp", "r", stdin);
freopen("XMAS.out", "w", stdout);
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
cin >> numQuery;
for (int i = 1; i <= numQuery; i++) {
cin >> l[i] >> r[i];
ids[r[i]].push_back(i);
}
a[0] = -1;
reach[0][0] = true;
for (int i = 1; i <= n; i++) {
/// xét a[i]
p[i] = mark[i - 1][k - a[i]];
/// p[i] = mark[i - 1] [k - a[i]]
/// vị trí gần nhất có giá trị là k - a[i]
////ip[p[i]] = i;
if (p[i]) {
/// em tìm được
swap(mark[i], mark[p[i] - 1]);
swap(reach[i], reach[p[i] - 1]);
}
mark[i][a[i]] = i;
reach[i][i] = true;
for (int id : ids[i]) {
/// [l1, i] -> reach[l1][i] = true hay false
/// [l2, i]
/// [l3, i]
ans[id] = reach[r[id]][l[id] - 1];
}
}
for (int i = 1; i <= numQuery; i++) {
cout << (ans[i] ? "YES\n" : "NO\n");
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE1BWF9OID0gNTAwMDA1OwoKaW50IG4sIGssIGFbTUFYX05dLCBwW01BWF9OXSwgaXBbTUFYX05dOwppbnQgbnVtUXVlcnksIGxbTUFYX05dLCByW01BWF9OXTsKYm9vbCBhbnNbTUFYX05dOwoKdmVjdG9yPGludD4gaWRzW01BWF9OXTsKCi8vLyB4dSBsaSBvZmZsaW5lIGNobyBuZW4gcGhhaSBsdXUgbGFpIGNhdSBob2kKCgptYXA8aW50LCBpbnQ+IG1hcmtbTUFYX05dOwoKLy8vIGzGsHUgbOG6oWkgdGjDtG5nIHRpbgoKLy8vIG1hcmtbaV1bal0gY8OzIG5naMSpYSBsw6AgduG7iyB0csOtIGfhuqduIG5o4bqldAoKLy8vIGPDsyBnacOhIHRy4buLIGLhurFuZyBqIG3DoCB0YSBjw7MgdGjhu4MgduG7m2kgdOG7m2kuCgovLy8gduG7m2kgdOG7m2kgY8OzIG5naMSpYSBsw6AgeMOzYSDEkcaw4bujYyBob8OgbiB0b8OgbiBnaeG7r2EgY2jDum5nCgoKCm1hcDxpbnQsIGJvb2w+IHJlYWNoW01BWF9OXTsKCi8vLyByZWFjaFtpXVtqXSA9IHRydWUuIG7hur91IGPDsyB0aOG7gyB4w7NhIMSRxrDhu6NjIMSRb+G6oW4gW2ksIGpdCgoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwoKICAgIGZyZW9wZW4oIlhNQVMuaW5wIiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJYTUFTLm91dCIsICJ3Iiwgc3Rkb3V0KTsKCiAgICBjaW4gPj4gbiA+PiBrOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgY2luID4+IGFbaV07CiAgICB9CiAgICBjaW4gPj4gbnVtUXVlcnk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBudW1RdWVyeTsgaSsrKSB7CiAgICAgICAgY2luID4+IGxbaV0gPj4gcltpXTsKICAgICAgICBpZHNbcltpXV0ucHVzaF9iYWNrKGkpOwogICAgfQoKICAgIGFbMF0gPSAtMTsKICAgIHJlYWNoWzBdWzBdID0gdHJ1ZTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKCiAgICAgICAgLy8vIHjDqXQgYVtpXQoKICAgICAgICBwW2ldID0gbWFya1tpIC0gMV1bayAtIGFbaV1dOwoKICAgICAgICAvLy8gcFtpXSA9IG1hcmtbaSAtIDFdIFtrIC0gYVtpXV0KCiAgICAgICAgLy8vIHbhu4sgdHLDrSBn4bqnbiBuaOG6pXQgY8OzIGdpw6EgdHLhu4sgbMOgIGsgLSBhW2ldCgoKCiAgICAgICAgLy8vL2lwW3BbaV1dID0gaTsKCgogICAgICAgIGlmIChwW2ldKSB7CgogICAgICAgICAgICAvLy8gZW0gdMOsbSDEkcaw4bujYwoKCiAgICAgICAgICAgIHN3YXAobWFya1tpXSwgbWFya1twW2ldIC0gMV0pOwoKICAgICAgICAgICAgc3dhcChyZWFjaFtpXSwgcmVhY2hbcFtpXSAtIDFdKTsKICAgICAgICB9CgogICAgICAgIG1hcmtbaV1bYVtpXV0gPSBpOwoKCgogICAgICAgIHJlYWNoW2ldW2ldID0gdHJ1ZTsKICAgICAgICBmb3IgKGludCBpZCA6IGlkc1tpXSkgewoKICAgICAgICAgICAgLy8vIFtsMSwgaV0gIC0+IHJlYWNoW2wxXVtpXSA9IHRydWUgaGF5IGZhbHNlCgogICAgICAgICAgICAvLy8gIFtsMiwgaV0KCiAgICAgICAgICAgIC8vLyBbbDMsIGldCgoKCiAgICAgICAgICAgIGFuc1tpZF0gPSByZWFjaFtyW2lkXV1bbFtpZF0gLSAxXTsKICAgICAgICB9CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbnVtUXVlcnk7IGkrKykgewogICAgICAgIGNvdXQgPDwgKGFuc1tpXSA/ICJZRVNcbiIgOiAiTk9cbiIpOwogICAgfQoKICAgIHJldHVybiAwOwp9Cgo=