#include <bits/stdc++.h>
using namespace std;
bool isPrime(int n) {
  if (n <= 1) return false;
  if (n <= 3) return true;
  if (n % 2 == 0 || n % 3 == 0) return false;
  for (int i = 5; i * i <= n; i = i + 6) {
    if (n % i == 0 || n % (i + 2) == 0) return false;
  }
  return true;
}
long long count(long long n) {
  long long k = n, s = 0;
  while (k > 0) {
    s += k % 10;
    k /= 10;
  }
  return s;
}
long long div(long long n) {
  for (long long i = 2; i * i <= n; i++) {
    if (n % i == 0) {
      return n / i;
    }
  }
}
long long d, x, y;
void extendedEuclid(long long A, long long B) {
  if (B == 0) {
    d = A;
    x = 1;
    y = 0;
  } else {
    extendedEuclid(B, A % B);
    int temp = x;
    x = y;
    y = temp - (A / B) * y;
  }
}
int main() {
  long long n, k, i;
  cin >> n >> k;
  if (k < n / 2) {
    cout << -1;
    return 0;
  }
  if (n == 1) {
    if (k > 0)
      cout << -1;
    else
      cout << 1;
    return 0;
  }
  long long m = n / 2;
  long long x = k / m;
  long long c = x;
  vector<long long> v;
  map<long long, long long> fr;
  for (i = 0; i < m; i++) {
    if (i == 0 && k % m != 0) {
      long long z = x + k % m;
      v.push_back(z);
      fr[z]++;
      v.push_back(2 * z);
      fr[2 * z]++;
    } else {
      while (fr[x] != 0) x = x + c;
      v.push_back(x);
      fr[x]++;
      while (fr[x] != 0) x = x + c;
      v.push_back(x);
      fr[x]++;
    }
  }
  if (v.size() != n) {
    while (fr[x] != 0) x++;
    v.push_back(x);
  }
  for (i = 0; i < n; i++) cout << v[i] << " ";
}
