#include <iostream>
#include <cstring>
#include <unordered_map>
using namespace std;
const int N = 1e5 + 10;
int h[N],e[N],ne[N],idx;
void add(int a,int b){
e[idx] = b;
ne[idx] = h[a];
h[a] = idx++;
}
bool st[N];
unordered_map<int, int> cnt;
int n,x;
void dfs(int a){
st[a] = true;
cnt[a]++;
for(int i = h[a];i != -1;i = ne[i]){
int t = e[i];
if(t == x){
cnt[x]++;
return;
}
if(!st[t]){
dfs(t);
if(cnt[x] == 2) return;
}
}
}
int main() {
cin>>n>>x;
memset(h,-1, sizeof h);
for(int i = 1;i <= n;i++){
int y;
cin>>y;
add(y,i);
}
dfs(x);
if(cnt[x] == 2) cout<<"Yes";
else cout<<"No";
}
// 64 位输出请用 printf("%lld")