#include <bits/stdc++.h>
using namespace std;
const int zsern = 1e6 + 1000;
const long long mod = 1e9 + 7;
const double pi = acos(-1.0);
long long n, k;
long long a[zsern];
std::vector<long long> num;
void gst(int id, int zser) {
  if (id - 1 >= 0 && id - 1 != zser)
    gst(id - 1, zser);
  else if (id - 2 >= 0 && id - 2 != zser)
    gst(id - 2, zser);
  num.push_back(1 << id);
  if (id - 1 >= 0 && id - 1 != zser)
    gst(id - 1, zser);
  else if (id - 2 >= 0 && id - 2 != zser)
    gst(id - 2, zser);
}
void AC() {
  long long x;
  while (~scanf("%lld%lld", &n, &x)) {
    long long zser = 0;
    for (int i = 0; i <= 18; i++) {
      if ((1ll << i) <= x) zser = i;
    }
    for (int i = n - 1; i >= 0; i--) {
      if (i != zser) {
        gst(i, zser);
        break;
      }
    }
    cout << num.size() << endl;
    for (int i = 0; i < num.size(); i++) printf("%lld ", num[i]);
  }
}
int main() {
  AC();
  return 0;
}
