#include <bits/stdc++.h>
using namespace std;
const int lim1 = (1 << 17);
const int lim2 = (1 << 18);
const int lim3 = (1 << 19);
void add(vector<int> &vi, int n) {
  int rem = n;
  int i = 0;
  while (rem > 0) {
    int a = lim3 + lim2 + i;
    int b = lim3 + lim2 + i + 1;
    int c = lim3 + lim2 + i + 2;
    int d = lim3 + lim2 + i + 3;
    int z = (a ^ b) ^ c ^ d;
    if (z == 0) {
      vi.push_back(a);
      vi.push_back(b);
      vi.push_back(c);
      vi.push_back(d);
      rem -= 4;
    }
    i += 4;
  }
}
void display(vector<int> &vi) {
  cout << "YES" << endl;
  for (int i = 0; i < vi.size(); i++) {
    cout << vi[i];
    if (i == vi.size() - 1)
      cout << endl;
    else
      cout << " ";
  }
}
int main(int argc, const char *argv[]) {
  int n, x;
  cin >> n >> x;
  if (n == 1) {
    cout << "YES" << endl;
    cout << x << endl;
  } else if (n == 2) {
    if (x != 0) {
      cout << "YES" << endl;
      cout << "0 " << x << endl;
    } else {
      cout << "NO" << endl;
    }
  } else if (n == 3) {
    cout << "YES" << endl;
    int a = x + lim1;
    int b = lim2;
    int c = lim1 + lim2;
    cout << a << " "
         << " " << b << " " << c << endl;
  } else if (n % 4 == 0) {
    vector<int> vi;
    vi.push_back(x);
    vi.push_back(lim1);
    vi.push_back(lim1 + lim2);
    vi.push_back(lim2);
    add(vi, n - 4);
    display(vi);
  } else if (n % 4 == 1) {
    vector<int> vi;
    vi.push_back(x);
    add(vi, n - 1);
    display(vi);
  } else if (n % 4 == 2) {
    vector<int> vi;
    vi.push_back(lim2 + lim1 + 1);
    vi.push_back(lim2 + lim1 + 2);
    vi.push_back(lim2 + 4);
    vi.push_back(lim2 + lim1 + 8);
    vi.push_back(lim1 + 15);
    vi.push_back(x);
    add(vi, n - 6);
    display(vi);
  } else if (n % 4 == 3) {
    vector<int> vi;
    vi.push_back(x + lim1);
    vi.push_back(x + lim2);
    vi.push_back(x + lim2 + lim1);
    add(vi, n - 3);
    display(vi);
  }
  return 0;
}
