#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 10;
const long long M = 1e7 + 1000;
const long long mod = 1e9 + 7;
const long long INF = 1e18;
const long long inf = -1e18;
bool isprime(long long x) {
  if (x == 1) return false;
  long long y = sqrt(x);
  for (int i = 2; i <= y; i++) {
    if (x % i == 0) {
      return false;
    }
  }
  return true;
}
long long bin_pow(long long a, long long b) {
  if (b == 0) return 1;
  if (b == 1) return a;
  if (a == 0) return 0;
  if (a == 1) return a;
  if (b % 2 == 0) {
    long long pw = bin_pow(a, b / 2);
    return pw * pw;
  } else {
    return bin_pow(a, b - 1) * a;
  }
}
const long double pi = acos(-1);
long long n, m, x;
long long us[5 * N];
vector<long long> ans;
int main() {
  cin >> n >> x;
  us[0] = 1;
  ans.push_back(0);
  long long m = (1 << n);
  for (int i = 1; i < m; i++) {
    if (us[i ^ x] != 1) {
      us[i] = 1;
      ans.push_back(i);
    }
  }
  cout << ans.size() - 1 << '\n';
  for (int i = 1; i < ans.size(); i++) cout << (ans[i] ^ ans[i - 1]) << " ";
}
