#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e4 + 15;
int N, M;
struct dosu {
int root[MAXN], sz[MAXN];
void INIT() {
for (int i = 1; i <= N; i++) root[i] = i;
}
int find_set(int u) {
return (root[u] == u ? u : root[u] = find_set(root[u]));
}
void union_set(int u, int v) {
u = find_set(u), v = find_set(v);
if (u == v) return;
if (sz[u] < sz[v]) swap(u, v);
root[v] = root[u];
sz[u] += sz[v];
}
} DSU;
main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
DSU.INIT();
for (int i = 2; i <= N; i++) {
int v, w;
cin >> v >> w;
if (w == 2) continue;
DSU.union_set(i, v);
}
while (M--) {
int u, v;
cin >> u >> v;
if (DSU.find_set(u) == DSU.find_set(v)) cout << "NO\n";
else cout << "YES\n";
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYTiA9IDFlNCArIDE1OwoKaW50IE4sIE07CgpzdHJ1Y3QgZG9zdSB7CiAgICBpbnQgcm9vdFtNQVhOXSwgc3pbTUFYTl07CiAgICB2b2lkIElOSVQoKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gTjsgaSsrKSByb290W2ldID0gaTsKICAgIH0KCiAgICBpbnQgZmluZF9zZXQoaW50IHUpIHsKICAgICAgICByZXR1cm4gKHJvb3RbdV0gPT0gdSA/IHUgOiByb290W3VdID0gZmluZF9zZXQocm9vdFt1XSkpOwogICAgfQoKICAgIHZvaWQgdW5pb25fc2V0KGludCB1LCBpbnQgdikgewogICAgICAgIHUgPSBmaW5kX3NldCh1KSwgdiA9IGZpbmRfc2V0KHYpOwogICAgICAgIGlmICh1ID09IHYpIHJldHVybjsKICAgICAgICBpZiAoc3pbdV0gPCBzelt2XSkgc3dhcCh1LCB2KTsKICAgICAgICByb290W3ZdID0gcm9vdFt1XTsKICAgICAgICBzelt1XSArPSBzelt2XTsKICAgIH0KfSBEU1U7CgoKbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwoKICAgIGNpbiA+PiBOID4+IE07CiAgICBEU1UuSU5JVCgpOwogICAgZm9yIChpbnQgaSA9IDI7IGkgPD0gTjsgaSsrKSB7CiAgICAgICAgaW50IHYsIHc7CiAgICAgICAgY2luID4+IHYgPj4gdzsKICAgICAgICBpZiAodyA9PSAyKSBjb250aW51ZTsKICAgICAgICBEU1UudW5pb25fc2V0KGksIHYpOwogICAgfQoKCiAgICB3aGlsZSAoTS0tKSB7CiAgICAgICAgaW50IHUsIHY7CiAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICBpZiAoRFNVLmZpbmRfc2V0KHUpID09IERTVS5maW5kX3NldCh2KSkgY291dCA8PCAiTk9cbiI7CiAgICAgICAgZWxzZSBjb3V0IDw8ICJZRVNcbiI7CiAgICB9Cn0K