#include using namespace std; using ll = long long; using pll = pair; #define drep(i, cc, n) for (ll i = (cc); i <= (n); ++i) #define rep(i, n) drep(i, 0, n - 1) #define all(a) (a).begin(), (a).end() #define pb push_back #define fi first #define se second const ll MOD = 1000000007; const ll MOD2 = 998244353; const ll INF = 1LL << 60; const ll N_MAX = 2e5; int main(){ ll n, x; cin >> n >> x; vector a(n); rep(i, n) cin >> a[i]; ll md = 30; if(x == 0) md = 0; else{ while (!((x >> md) & 1)) md--; } map> mp; rep(i, n){ mp[a[i]>>(md+1)].pb(a[i]); } for(auto itr=mp.begin(); itr!=mp.end(); itr++){ vector zero; vector one; for(ll i : mp[(*itr).fi]){ if((i>>md) & 1) one.pb(i); else zero.pb(i); } sort(all(zero)); sort(all(one)); ll nz = (ll)zero.size(); ll no = (ll)one.size(); if(abs(nz-no) >= 2){ cout << "No" << endl; return 0; } rep(i, nz-1){ if(zero[i] == zero[i+1]){ cout << "No" << endl; return 0; } } rep(i, no-1){ if(one[i] == one[i+1]){ cout << "No" << endl; return 0; } } if((nz==0 && no==1) || (nz==1 && no==0)) continue; bool flag1 = false; bool flag2 = false; if(nz == no){ // 0, 1, 0, 1 flag1 = true; for(ll i=0; i