#include <bits/stdc++.h>
using namespace std;
int gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
int main() {
  int n, x;
  cin >> n >> x;
  int k;
  for (k = 0; (1 << k) <= x; k++)
    ;
  int maxi = (1 << k) - 1;
  int inv = maxi ^ x;
  int hue, cic;
  int i = 0;
  vector<int> ans;
  if (!(n % 4)) {
    hue = 1;
    cic = n / 4 - 1;
    if (x >= 1 && x <= 3) {
      ans.push_back(4);
      ans.push_back(8);
      ans.push_back(12);
      i = 12;
    } else {
      ans.push_back(1);
      ans.push_back(2);
      ans.push_back(3);
    }
  } else {
    hue = n % 4;
    cic = n / 4;
  }
  if (hue == 1) {
    ans.push_back(x);
  } else if (hue == 2) {
    if (x == 0) {
      if (cic) {
        cic--;
        ans.push_back(1);
        ans.push_back(2);
        ans.push_back(3);
        ans.push_back(7);
        ans.push_back(8);
        ans.push_back(15);
        i = 12;
      } else {
        cout << "NO" << endl;
        return 0;
      }
    } else {
      ans.push_back(0);
      ans.push_back(x);
    }
  } else if (hue == 3) {
    if (x == 0) {
      ans.push_back(1);
      ans.push_back(2);
      ans.push_back(3);
    } else if (x == 1) {
      ans.push_back(0);
      ans.push_back(2);
      ans.push_back(3);
    } else if (x == maxi) {
      ans.push_back(0);
      ans.push_back(1);
      ans.push_back(x - 1);
    } else {
      ans.push_back(0);
      ans.push_back(maxi);
      ans.push_back(inv);
      i = maxi + 1;
    }
  }
  int printed = 0;
  for (; printed < cic * 4; i += 4) {
    if ((i + 4 <= x && x <= i + 7) || (i + 4 <= inv && inv <= i + 7)) continue;
    if (i + 7 > 1000000) break;
    ans.push_back(i + 4);
    ans.push_back(i + 5);
    ans.push_back(i + 6);
    ans.push_back(i + 7);
    printed += 4;
  }
  if (ans.size() != n) {
    cout << "NO" << endl;
  } else {
    cout << "YES" << endl;
    for (int nn : ans) {
      cout << nn << " ";
    }
    cout << endl;
  }
}
