#include<bits/stdc++.h>
using namespace std;
vector<int> g[100005];
int cnt = 1,low[100005],num[100005],scc_end[100005];
void dfs(int u,int p){
low[u] = num[u] = cnt;
++cnt;
for(auto v : g[u]){
if(v == p) continue;
if(num[v] == 0){
dfs(v,u);
low[u] = min(low[u],low[v]);
}else{
low[u] = min(low[u],num[v]);
}
}
scc_end[u] = cnt-1;
}
int main(){
int n,q;
cin >> n >> q;
int p[n];
for(int i = 1; i <= n;++i){
cin >> p[i];
g[i].push_back(p[i]);
}
g[1].push_back(2);
g[2].push_back(1);
for(int i = 1; i <= n;++i){
if(num[i] == 0){
dfs(i,i);
}
}
while(q--){
int x,y;
cin >> x >> y;
if((low[x] <= low[y] && low[y] <= scc_end[x])||(low[y] <= low[x] && low[x] <= scc_end[y])){
cout <<"YES\n";
}
else cout <<"NO\n";
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdmVjdG9yPGludD4gZ1sxMDAwMDVdOwppbnQgY250ID0gMSxsb3dbMTAwMDA1XSxudW1bMTAwMDA1XSxzY2NfZW5kWzEwMDAwNV07CnZvaWQgZGZzKGludCB1LGludCBwKXsKCWxvd1t1XSA9IG51bVt1XSA9IGNudDsKCSsrY250OwoJZm9yKGF1dG8gdiA6IGdbdV0pewoJCWlmKHYgPT0gcCkgY29udGludWU7CgkJaWYobnVtW3ZdID09IDApewoJCQlkZnModix1KTsKCQkJbG93W3VdID0gbWluKGxvd1t1XSxsb3dbdl0pOwoJCX1lbHNlewoJCQlsb3dbdV0gPSBtaW4obG93W3VdLG51bVt2XSk7CgkJfQoJfQoJc2NjX2VuZFt1XSA9IGNudC0xOwp9CmludCBtYWluKCl7CglpbnQgbixxOwoJY2luID4+IG4gPj4gcTsKCWludCBwW25dOwoJZm9yKGludCBpID0gMTsgaSA8PSBuOysraSl7CgkJY2luID4+IHBbaV07CgkJZ1tpXS5wdXNoX2JhY2socFtpXSk7Cgl9CglnWzFdLnB1c2hfYmFjaygyKTsKCWdbMl0ucHVzaF9iYWNrKDEpOwoJZm9yKGludCBpID0gMTsgaSA8PSBuOysraSl7CgkJaWYobnVtW2ldID09IDApewoJCQlkZnMoaSxpKTsKCQl9Cgl9Cgl3aGlsZShxLS0pewoJCWludCB4LHk7CgkJY2luID4+IHggPj4geTsKCQlpZigobG93W3hdIDw9IGxvd1t5XSAmJiBsb3dbeV0gPD0gc2NjX2VuZFt4XSl8fChsb3dbeV0gPD0gbG93W3hdICYmIGxvd1t4XSA8PSBzY2NfZW5kW3ldKSl7CgkJICAgIGNvdXQgPDwiWUVTXG4iOwoJCX0KCQllbHNlIGNvdXQgPDwiTk9cbiI7Cgl9Cn0=