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.
/*
If you want to aim high, aim high
Don't let that studying and grades consume you
Just live life young
******************************
What do you think? What do you think?
1st on Billboard, what do you think of it
Next is a Grammy, what do you think of it
However you think, I’m sorry, but shit, I have no fucking interest
*******************************
Higher, higher, even higher, to the point you won’t even be able to see me
https://www.a2oj.com/Ladder16.html
*******************************
NEVER DO 300IQ CONTESTS EVER
300IQ AS WRITER = EXTRA NONO
*/
import java.util.*;
import java.io.*;
import java.math.*;

   public class x1271E
   {
      public static void main(String omkar[]) throws Exception
      {
         BufferedReader infile = new BufferedReader(new InputStreamReader(System.in));  
         StringTokenizer st = new StringTokenizer(infile.readLine());
         N = Long.parseLong(st.nextToken());
         long K = Long.parseLong(st.nextToken());
         if(N == 1)
         {
            System.out.println(1);
            return;
         }
         //fill out tree
         long max = 0L; int b = 0;
         for(b=0; b < 60 && max < N; b++)
            max += (1L << b);
         bottom = b;
         //evens
         long low = 1;
         long high = N/2;
         while(low != high)
         {
            long mid = (low+high+1)/2;
            if(find(2*mid)+find(2*mid+1) >= K)
               low = mid;
            else
               high = mid-1;
         }
         long res = 1L;
         if(find(2*low)+find(2*low+1) >= K)
            res = 2*low;
         low = 0;
         high = N/2;
         if(N%2 == 0)
            high--;
         while(low != high)
         {
            long mid = (low+high+1)/2;
            if(find(2*mid+1) >= K)
               low = mid;
            else
               high = mid-1;
         }
         res = Math.max(res, 2*low+1);
         System.out.println(res);
      }
      static long N;
      static int bottom;
      public static long find(long x)
      {
         int level = 0;
         for(int b=59; b >= 0; b--)
            if((x&(1L<<b)) > 0)
            {
               level = b+1;
               break;
            }
         long res = 0L;
         int delta = bottom-level;
         for(int i=0; i <= delta; i++)
            res += (1L << i);
         long left = x;
         long right = x;
         for(int i=0; i < delta; i++)
         {
            left <<= 1;
            right <<= 1;
            right++;
         }
         if(left > N)
            res -= (1L << delta);
         else if(right > N)
            res -= right-N;
         return res;
      }
   }