#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
const int M = 6666666;
const int INF = 0x3f3f3f3f;
const double PI = acos(-1.0);
const double eps = 1e-7;
inline int read() {
  char k = 0;
  char ls;
  ls = getchar();
  for (; ls < '0' || ls > '9'; k = ls, ls = getchar())
    ;
  int x = 0;
  for (; ls >= '0' && ls <= '9'; ls = getchar()) x = x * 10 + ls - '0';
  if (k == '-') x = 0 - x;
  return x;
}
vector<int> V[N];
long long num1, num2;
bool vis[N];
void dfs(int u, int num) {
  vis[u] = 1;
  for (int i = 0; i < V[u].size(); i++) {
    int v = V[u][i];
    if (vis[v]) continue;
    if (num % 2)
      num1++;
    else
      num2++;
    dfs(v, num + 1);
  }
}
vector<int> ans;
int cnt;
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  if (n == 2 && m == 0) {
    printf("NO\n");
    return 0;
  }
  if (n < 3) {
    if (n == 1)
      printf("YES\n%d\n", m);
    else if (n == 2)
      printf("YES\n0 %d\n", m);
    return 0;
  }
  for (int i = 1; i <= n - 3; i++) {
    cnt ^= i;
    ans.push_back(i);
  }
  int tmp = 1 << 17;
  if (cnt == m) {
    ans.push_back(tmp);
    ans.push_back(tmp << 1);
    ans.push_back(tmp ^ (tmp << 1));
  } else {
    ans.push_back(0);
    ans.push_back(tmp);
    ans.push_back(tmp ^ m ^ cnt);
  }
  printf("YES\n%d", ans[0]);
  for (int i = 1; i < ans.size(); i++) {
    printf(" %d", ans[i]);
  }
  printf("\n");
}
