#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")