#include <bits/stdc++.h>
using namespace std;
using namespace std;
struct data {
  int val, two;
};
data a[100004];
int sum, limit;
vector<int> s;
bool cmpdata(data a, data b) { return (a.two < b.two); }
int main() {
  scanf("%d%d", &sum, &limit);
  memset(a, 0, sizeof(a));
  for (int i = 1; i <= limit; i++) {
    a[i].val = i;
    for (int j = 0; j <= log2(i); j++) {
      if (i & (1 << j)) {
        a[i].two = 1 << j;
        break;
      }
    }
  }
  sort(a + 1, a + limit + 1, cmpdata);
  s.clear();
  for (int i = limit; i >= 1; i--) {
    if (sum >= a[i].two) {
      sum -= a[i].two;
      s.push_back(a[i].val);
    }
  }
  if (sum == 0) {
    printf("%d\n", s.size());
    for (int i = 0; i < s.size(); i++) printf("%d ", s[i]);
  } else
    printf("-1");
  return 0;
}
