At the children's day, the child came to Picks's house, and messed his house up. Picks was angry at him. A lot of important things were lost, in particular the favorite set of Picks.

Fortunately, Picks remembers something about his set S:  its elements were distinct integers from 1 to limit;  the value of $\sum_{x \in S} \text{lowbit}(x)$ was equal to sum; here lowbit(x) equals 2^{k} where k is the position of the first one in the binary representation of x. For example, lowbit(10010_2) = 10_2, lowbit(10001_2) = 1_2, lowbit(10000_2) = 10000_2 (binary representation). 

Can you help Picks and find any set S, that satisfies all the above conditions?


-----Input-----

The first line contains two integers: sum, limit (1 ≤ sum, limit ≤ 10^5).


-----Output-----

In the first line print an integer n (1 ≤ n ≤ 10^5), denoting the size of S. Then print the elements of set S in any order. If there are multiple answers, print any of them.

If it's impossible to find a suitable set, print -1.


-----Examples-----
Input
5 5

Output
2
4 5

Input
4 3

Output
3
2 3 1

Input
5 1

Output
-1



-----Note-----

In sample test 1: lowbit(4) = 4, lowbit(5) = 1, 4 + 1 = 5.

In sample test 2: lowbit(1) = 1, lowbit(2) = 2, lowbit(3) = 1, 1 + 2 + 1 = 4.

Difficulty: interview

Starter code:

Solutions:
(a, b), x, y = list(map(int, input().split())), [], 0

def bin(s):
    return str(s) if s <= 1 else bin(s >> 1) + str(s & 1)

def lowbit(s):
    return int('1' + bin(s).split('1')[-1], 2)

for i in reversed(range(b + 1)):
    if y == a:
        break
    if a >= y + lowbit(i):
        x.append(i) 
        y += lowbit(i)

if y == a:
    print( len(x) )
    print( ' '.join(str(i) for i in x) )
else:
    print( -1 )

s, l = map(int, input().split())
t = []
for i in range(l, 0, -1):
    k = i & (i ^ (i - 1))
    if s >= k:
        t.append(str(i))
        s -= k
print(-1 if s else str(len(t)) + '\n' + ' '.join(t))

s, l = map(int, input().split())
t = []
for i in range(l, 0, -1):
    k = i & (i ^ (i - 1))
    if s >= k:
        t.append(str(i))
        s -= k
print(-1 if s else str(len(t)) + '\n' + ' '.join(t))

sum, limit = map(int, input().split(' '))

ans = set()

def low_bit(n):
    k = 0
    while not n & (1 << k):
        k += 1
    return 1 << k

for i in reversed(range(1, limit + 1)):
    t = low_bit(i)
    if sum >= t:
        sum -= t
        ans.add(i)

if sum == 0:
    print(len(ans))
    print(' '.join([str(x) for x in ans]))
else:
    print(-1)

target, limit = list(map(int, input().split()))

def lowbit(x):
    return x & (x ^ (x - 1))

ans = []
for i in range(limit, 0, -1):
    x = lowbit(i)
    if x <= target:
        ans.append(i)
        target -= x

if target:
    print(-1)
else:
    print(len(ans))
    print(" ".join(map(str, ans)))
        



s, limit = list(map(int, input().split()))

ans = []

for i in range(limit, 0, -1):
    k = i & (i ^(i-1))
    if s >= k:
        s-=k
        ans.append(i)

if s:
    print(-1)
else:
    print(len(ans))
    print(*ans)





def lowbit(x):
	return x & (-x)
	
def solve():
	nonlocal sum, limit, list
	while(limit > 0 and sum!=0):
		if(sum-lowbit(limit)>=0):
			sum-=lowbit(limit)
			list.add(limit)
		limit-=1
	if(sum==0):
		return True
	return False
	
sum, limit = tuple(int(i) for i in input().split())
list = set()

if(solve()):
	s = str(len(list)) + "\n"
	for i in list:
		s += str(i) + " "
	print (s[:len(s)-1])
else:
	print (-1)