#include<bits/stdc++.h>
using namespace std;
vector<int> g[100000];
int cnt,low[1000000],num[1000000],scc_end[1000000];
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;
}
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] <= num[y] && num[y] <= scc_end[x])||(low[y] <= num[x] && num[x] <= scc_end[y])) cout <<"YES\n";
else cout <<"NO\n";
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdmVjdG9yPGludD4gZ1sxMDAwMDBdOwppbnQgY250LGxvd1sxMDAwMDAwXSxudW1bMTAwMDAwMF0sc2NjX2VuZFsxMDAwMDAwXTsKdm9pZCBkZnMoaW50IHUsaW50IHApewoJbG93W3VdID0gbnVtW3VdID0gY250OwoJKytjbnQ7Cglmb3IoYXV0byB2IDogZ1t1XSl7CgkJaWYodiA9PSBwKSBjb250aW51ZTsKCQlpZihudW1bdl0gPT0gMCl7CgkJCWRmcyh2LHUpOwoJCQlsb3dbdV0gPSBtaW4obG93W3VdLGxvd1t2XSk7CgkJfWVsc2V7CgkJCWxvd1t1XSA9IG1pbihsb3dbdV0sbnVtW3ZdKTsKCQl9Cgl9CglzY2NfZW5kW3VdID0gY250Owp9CmludCBtYWluKCl7CglpbnQgbixxOwoJY2luID4+IG4gPj4gcTsKCWludCBwW25dOwoJZm9yKGludCBpID0gMTsgaSA8PSBuOysraSl7CgkJY2luID4+IHBbaV07CgkJZ1tpXS5wdXNoX2JhY2socFtpXSk7Cgl9CglnWzFdLnB1c2hfYmFjaygyKTsKCWdbMl0ucHVzaF9iYWNrKDEpOwoJZm9yKGludCBpID0gMTsgaSA8PSBuOysraSl7CgkJaWYobnVtW2ldID09IDApewoJCQlkZnMoaSxpKTsKCQl9Cgl9Cgl3aGlsZShxLS0pewoJCWludCB4LHk7CgkJY2luID4+IHggPj4geTsKCQlpZigobG93W3hdIDw9IG51bVt5XSAmJiBudW1beV0gPD0gc2NjX2VuZFt4XSl8fChsb3dbeV0gPD0gbnVtW3hdICYmIG51bVt4XSA8PSBzY2NfZW5kW3ldKSkgY291dCA8PCJZRVNcbiI7CgkJZWxzZSBjb3V0IDw8Ik5PXG4iOwoJfQp9