#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;
}
