At first, let's define function f(x) as follows: $$$ \begin{matrix} f(x) & = & \left\{ \begin{matrix} x/2 & \mbox{if } x  is even \\\ x - 1 & \mbox{otherwise } \end{matrix} \right. \end{matrix} $$$

We can see that if we choose some value v and will apply function f to it, then apply f to f(v), and so on, we'll eventually get 1. Let's write down all values we get in this process in a list and denote this list as path(v). For example, path(1) = [1], path(15) = [15, 14, 7, 6, 3, 2, 1], path(32) = [32, 16, 8, 4, 2, 1].

Let's write all lists path(x) for every x from 1 to n. The question is next: what is the maximum value y such that y is contained in at least k different lists path(x)?

Formally speaking, you need to find maximum y such that \left| \{ x ~|~ 1 ≤ x ≤ n, y ∈ path(x) \} \right| ≥ k.

Input

The first line contains two integers n and k (1 ≤ k ≤ n ≤ 10^{18}).

Output

Print the only integer — the maximum value that is contained in at least k paths.

Examples

Input


11 3


Output


5


Input


11 6


Output


4


Input


20 20


Output


1


Input


14 5


Output


6


Input


1000000 100


Output


31248

Note

In the first example, the answer is 5, since 5 occurs in path(5), path(10) and path(11).

In the second example, the answer is 4, since 4 occurs in path(4), path(5), path(8), path(9), path(10) and path(11).

In the third example n = k, so the answer is 1, since 1 is the only number occuring in all paths for integers from 1 to 20.
import sys

def minp():
	return sys.stdin.readline().strip()

def mint():
	return int(minp())

def mints():
	return map(int,minp().split())

def full(x, n):
	if ((n + 1) & n) != 0:
		raise Exception("qwe")
	r = 1
	while True:
		if r >= x:
			return n
		if n == 1:
			return None
		r *= 2
		n -= 1
		if r >= x:
			return n
		n //= 2
		r += 1

def is_good(x, n):
	l = x
	r = x
	rp = x
	if x % 2 == 0:
		return None
	while l <= n:
		if l <= n and r > n:
			return None
		l *= 2
		rp = r
		r = r * 2 + 1
	return rp

def full2(x, c, rp):
	r = 1
	while True:
		if r >= x:
			return rp
		if rp == c:
			return None
		r *= 2
		rp -= 1
		if r >= x:
			return rp
		rp //= 2
		r += 1
	return None


def full1(k, x, n):
	rp = is_good(x, n)
	if rp == None:
		r = None
		if f(x, n) >= k:
			r = x
		if 2*x <= n:
			r1 = full1(k, 2*x, n)
			if r1 != None and (r == None or r < r1):
				r = r1
		if 2*x + 1 <= n:
			r1 = full1(k, 2*x + 1, n)
			if r1 != None and (r == None or r < r1):
				r = r1
		return r
	else:
		return full2(k, x, rp)

def fulls(k, n):
	r = 1
	for i in range(1,n+1):
		if f(i,n) >= k:
			r = i
	return r

def f(x, n):
	r = 0
	rp = is_good(x, n)
	if rp != None:
		r = 1
		while rp != x:
			r = (r*2 + 1)
			rp //= 2
		return r

	if x <= n:
		r += 1
	if x % 2 == 0 and x + 1 <= n:
		r += f(x + 1, n)
	if 2 * x <= n:
		r += f(x * 2, n)
	#print(x, r)
	return r

def f1(x, n):
	r = 0
	if x <= n:
		r += 1
	if x % 2 == 0 and x + 1 <= n:
		r += f(x + 1, n)
	if 2 * x <= n:
		r += f(x * 2, n)
	#print(x, r)
	return r

'''
from random import randint
while True:
	n = randint(1, 1024)
	x = randint(1, n)
	if full1(x, 1, n) != fulls(x, n):
		print(x, n, full1(x, 1, n), fulls(x,n))
'''
n, k = mints()
print(full1(k, 1, n))
