Problem: It's holiday. Mashmokh and his boss, Bimokh, are playing a game invented by Mashmokh. 

In this game Mashmokh writes sequence of n distinct integers on the board. Then Bimokh makes several (possibly zero) moves. On the first move he removes the first and the second integer from from the board, on the second move he removes the first and the second integer of the remaining sequence from the board, and so on. Bimokh stops when the board contains less than two numbers. When Bimokh removes numbers x and y from the board, he gets gcd(x, y) points. At the beginning of the game Bimokh has zero points.

Mashmokh wants to win in the game. For this reason he wants his boss to get exactly k points in total. But the guy doesn't know how choose the initial sequence in the right way. 

Please, help him. Find n distinct integers a1, a2, ..., an such that his boss will score exactly k points. Also Mashmokh can't memorize too huge numbers. Therefore each of these integers must be at most 109.

Input

The first line of input contains two space-separated integers n, k (1 ≤ n ≤ 105; 0 ≤ k ≤ 108).

Output

If such sequence doesn't exist output -1 otherwise output n distinct space-separated integers a1, a2, ..., an (1 ≤ ai ≤ 109).

Examples

Input

5 2


Output

1 2 3 4 5


Input

5 3

Output

2 4 3 7 1

Input

7 2


Output

-1

Note

gcd(x, y) is greatest common divisor of x and y.

Solution (in JAVA):

Solution:
   // package com.company;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.lang.reflect.Array;
    import java.sql.SQLOutput;
    import java.util.*;
    public class Main {

        public static void main(String[] args) throws IOException {
           Scanner s = new Scanner(System.in);
//   BufferedReader s=new BufferedReader(new InputStreamReader(System.in));
              StringBuilder sb = new StringBuilder();//int n=Integer.parseInt(s.readLine());
              int n=s.nextInt();int k=s.nextInt();
              if(k<n/2||(n/2==0&&k>0)){
                  System.out.println(-1);
              }
              else if(n/2==0&&k==0) System.out.println(1);
              else{int [] a=new int[n];int j=n-1;if(n%2!=0) j--;
                  int extra=k-n/2;HashMap<Integer,Integer> h=new HashMap<Integer, Integer>();
                  if(extra!=0){
                //      System.out.println(j);
                      extra++;
                      a[j]=extra;a[j-1]=extra*2;h.put(extra,1);h.put(extra*2,1);
                      int l=1;
                      for(int i=0;i<n;i++){
                          if(a[i]==0){
                              while(h.containsKey(l)) l++; a[i]=l;l++;
                          }
                      }
                  }else{
                      int l=1;
                      for(int i=0;i<n;i++){
                          if(a[i]==0){
                            a[i]=l;l++;
                          }
                      }

                  }
                 for(int i=0;i<n;i++) sb.append(a[i]+" ");
                  System.out.println(sb.toString()  );

              }
        }
        static  void computeLPSArray(String pat, int M, int lps[])
        {
            int len = 0;
            int i = 1;
            lps[0] = 0;
            while (i < M) {
                if (pat.charAt(i) == pat.charAt(len)) {
                    len++;
                    lps[i] = len;
                    i++;
                }
                else // (pat[i] != pat[len])
                {
                    if (len != 0) {
                        len = lps[len - 1];
   }
                    else // if (len == 0)
                    {
                        lps[i] = len;
                        i++;
                    }
                }
            }
        }
        static boolean isPrime(int n)
        {
            // Corner cas
            if (n <= 1) return false;
            if (n <= 3) return true;

            // This is checked so that we can skip
            // middle five numbers in below loop
            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;
        }
        static boolean isPrime(int n, int k)
        {
            // Corner cases
            if (n <= 1 || n == 4) return false;
            if (n <= 3) return true;

            // Try k times
            while (k > 0)
            {
                // Pick a random number in [2..n-2]
                // Above corner cases make sure that n > 4
                int a = 2 + (int)(Math.random() % (n - 4));

                // Fermat's little theorem
                if (power(a, n - 1, n) != 1)
                    return false;

                k--;
            }

            return true;
        }
        static double power(double x, long y, int p) {
            double res = 1;
            x = x % p;
            while (y > 0) {
                if ((y & 1) == 1)
                    res = (res * x) % p;
                y = y >> 1;
                x = (x * x) % p;
            }
            return res;
        }
        public static void fracion(double x) {
            String a = "" + x;
            String spilts[] = a.split("\\."); // split using decimal
            int b = spilts[1].length(); // find the decimal length
            int denominator = (int) Math.pow(10, b); // calculate the denominator
            int numerator = (int) (x * denominator); // calculate the nerumrator Ex
            // 1.2*10 = 12
            int gcd = (int)gcd((long)numerator, denominator); // Find the greatest common
            // divisor bw them
            String fraction = "" + numerator / gcd + "/" + denominator / gcd;
            // System.out.println((denominator/gcd));
            long x1=modInverse(denominator / gcd,998244353  );
            //  System.out.println(x1);
            System.out.println((((numerator / gcd )%998244353 *(x1%998244353  ))%998244353  ) );
        }static int max=Integer.MIN_VALUE;
static int max1=Integer.MIN_VALUE;static long[][] dp;static int[][] c;static int k=1;static int bhoo=0;
static int[] car;static int ans;static HashMap<Integer,Integer>[] ha;
public static void dfs(int ans2,int papa, int i, ArrayList<Integer>[] h, int[] vis,HashMap<Integer,Integer>[] bad) {
    vis[i] = 1;
    if(i!=1&&h[i].size()==1){
    if(ans2!=-1)  {ans++;  sb1.append(ans2+" ");}
    }
    if(h[i]==null) return;
int hu=0;int hai=0;
for(Integer j:h[i]){
    if(vis[j]==0&&bad[i].containsKey(j)) {
        hai=1;break;
    }
}int khi=0;
             for(Integer j:h[i]) {//if(vis[j]==0) flag=1;
                    if(vis[j]==0){
                        if(!bad[i].containsKey(j)){
                        if(hai==0&&khi==0){khi=1;    dfs(ans2,papa,j,h,vis,bad);}
                        else dfs(-1,papa,j,h,vis,bad);
                        }else{
                            if(hu==0){
                                if(papa==0){//ans++;//sb1.append(j+" ");
                                    dfs(j,1,j,h,vis,bad);
                                }else{
                                hu=1;
                                dfs( j,1,j,h,vis,bad);}
                            }else{
                            //    ans++;//sb1.append(j+" ");
                                dfs(j,1,j,h,vis,bad);
                            }
                        }
                    }
             }//if(flag==1) bhoo=-1;
        }static StringBuilder sb1=new StringBuilder();
        public static void bfs(int i, HashMap<Integer, Integer>[] h, int[] vis, int len, int papa) {
            Queue<Integer> q = new LinkedList<Integer>();
            q.add(i);
   }
      static int i(String a) {
            return Integer.parseInt(a);
        }
     static long l(String a) {
            return Long.parseLong(a);
        }
        static String[] inp() throws IOException {
            BufferedReader s = new BufferedReader(new InputStreamReader(System.in));
            return s.readLine().trim().split("\\s+");
        }


        static long gcd(long a, long b) {
            if (b == 0)
                return a;
            return gcd(b, a % b);
        }
        static long modInverse(int a, int m)
        {


            {
                // If a and m are relatively prime, then modulo inverse
                // is a^(m-2) mode m
                return (power(a, m - 2, m));
            }
        }

        // To compute x^y under modulo m
        static long power(int x, int y, int m)
        {
            if (y == 0)
                return 1;

            long p = power(x, y / 2, m) % m;
            p = (p * p) % m;

            if (y % 2 == 0)
                return p;
            else
                return (x * p) % m;
        }

        // Function to return gcd of a and b

    }
    class Student
    {
        int l;int r;int i;
        public Student(int l, int r,int i) {
            this.l = l;
            this.r = r;this.i=i;
        }
    // Constructor


        // Used to print student details in main()
        public String toString()
        {
            return this.l+" ";
        }
    }

    class Sortbyroll implements Comparator<Student>
    {
        // Used for sorting in ascending order of
        // roll number
        public int compare(Student a, Student b){
      return a.l-b.l;  }
    } class Sortbyroll1 implements Comparator<Student>
    {
        // Used for sorting in ascending order of
        // roll number
        public int compare(Student a, Student b){
        return a.l-b.l;
        }
    }