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.
#include <bits/stdc++.h>
using namespace std;
unsigned long long o = 1;
unsigned long long n;
unsigned long long k;
unsigned long long get(unsigned long long t, unsigned long long mm) {
  unsigned long long clc = 0;
  unsigned long long n1 = mm;
  while (n1 > 0) {
    n1 /= 2;
    clc++;
  }
  unsigned long long clc2 = 0;
  unsigned long long n2 = t;
  while (n2 > 0) {
    n2 /= 2;
    clc2++;
  }
  if (t == 6) {
    t = 6;
  }
  unsigned long long ans = 0;
  for (unsigned long long i = 0; i < clc - clc2; i++) {
    ans += (o << i);
  }
  if (t % 2 == 0) {
    ans *= 2;
  }
  unsigned long long st;
  if ((mm & (o << (clc - clc2))) > 0 && t % 2 == 0) {
    st = clc - clc2 + 1;
  } else {
    st = clc - clc2;
  }
  unsigned long long ans2 = 0;
  if (st > 0) {
    for (unsigned long long i = st - 1;; i--) {
      ans2 *= 2;
      if (mm & (o << i)) {
        ans2 += 1;
      }
      if (i == 0) {
        break;
      }
    }
  }
  ans2 += 1;
  return ans + ans2;
}
pair<unsigned long long, unsigned long long> calc(unsigned long long m) {
  unsigned long long cr = m;
  unsigned long long kp = get(cr, m);
  if (kp >= k) {
    return {kp, cr};
  }
  while (cr > 0) {
    if (cr % 2 == 1) {
      cr -= 1;
    } else {
      cr /= 2;
    }
    unsigned long long kp = get(cr, m);
    if (kp >= k) {
      return {kp, cr};
    }
  }
  return {0, 0};
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> k;
  vector<unsigned long long> pos;
  for (unsigned long long i = 0; i <= 63; i++) {
    if (n & (o << i)) {
      pos.push_back(i);
    }
  }
  pair<unsigned long long, unsigned long long> p = calc(n);
  unsigned long long mx = 0;
  if (p.first >= k) {
    mx = max(mx, p.second);
  }
  unsigned long long m = n;
  for (unsigned long long v : pos) {
    m ^= (o << v);
    if (v > 0) {
      for (unsigned long long j = v - 1; j >= 0; j--) {
        m |= (o << j);
        if (j == 0) {
          break;
        }
      }
    }
    auto p1 = calc(m);
    if (p1.first >= k) {
      mx = max(mx, p1.second);
    }
  }
  cout << mx << endl;
}
