#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
template<typename T>
void maximize(T& a, const T& b) {
if (a < b) a = b;
}
vector<int> digit_l, digit_r;
vector<int> getDigit(ll n) {
vector<int> ans;
for (; n > 0; n >>= 1) ans.push_back(n & 1);
return ans;
}
// larger_a, smaller_a: điều kiện smaller, larger của số a
// larger_b, smaller_b: điều kiện smaller, larger của số b
// dp = Giá trị XOR lớn nhất của phần còn lại khi phần prefix
// trước vị trí idx của a và b mang theo điều kiện smaller, larger tương ứng
ll memo[60][2][2][2][2];
ll dp(int idx, bool larger_a, bool smaller_a, bool larger_b, bool smaller_b) {
if (idx == -1) return 0;
ll& ans = memo[idx][larger_a][smaller_a][larger_b][smaller_b];
if (ans != -1) return ans;
ans = 0;
int min_digit_a = (larger_a) ? 0 : digit_l[idx];
int max_digit_a = (smaller_a) ? 1 : digit_r[idx];
int min_digit_b = (larger_b) ? 0 : digit_l[idx];
int max_digit_b = (smaller_b) ? 1 : digit_r[idx];
for (int a_i = min_digit_a; a_i <= max_digit_a; a_i++) {
for (int b_i = min_digit_b; b_i <= max_digit_b; b_i++) {
ll val = (a_i ^ b_i) * (1ll << idx);
maximize(ans, val + dp(idx - 1, larger_a | (a_i > digit_l[idx]), smaller_a | (a_i < digit_r[idx]),
larger_b | (b_i > digit_l[idx]), smaller_b | (b_i < digit_r[idx])));
}
}
return ans;
}
ll solve(ll l, ll r) {
digit_l = getDigit(l);
digit_r = getDigit(r);
while (digit_l.size() < digit_r.size()) digit_l.push_back(0);
memset(memo, -1, sizeof memo);
return dp(digit_r.size() - 1, 0, 0, 0, 0);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll l, r;
cin >> l >> r;
ll ans = solve(l, r);
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBtYXhpbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYSA8IGIpIGEgPSBiOyAgCn0KCnZlY3RvcjxpbnQ+IGRpZ2l0X2wsIGRpZ2l0X3I7ICAKCnZlY3RvcjxpbnQ+IGdldERpZ2l0KGxsIG4pIHsKCXZlY3RvcjxpbnQ+IGFuczsgCglmb3IgKDsgbiA+IDA7IG4gPj49IDEpIGFucy5wdXNoX2JhY2sobiAmIDEpOyAKCXJldHVybiBhbnM7IAp9CgovLyBsYXJnZXJfYSwgc21hbGxlcl9hOiDEkWnhu4F1IGtp4buHbiBzbWFsbGVyLCBsYXJnZXIgY+G7p2Egc+G7kSBhCi8vIGxhcmdlcl9iLCBzbWFsbGVyX2I6IMSRaeG7gXUga2nhu4duIHNtYWxsZXIsIGxhcmdlciBj4bunYSBz4buRIGIKLy8gZHAgPSBHacOhIHRy4buLIFhPUiBs4bubbiBuaOG6pXQgY+G7p2EgcGjhuqduIGPDsm4gbOG6oWkga2hpIHBo4bqnbiBwcmVmaXggCi8vICAgICAgdHLGsOG7m2MgduG7iyB0csOtIGlkeCBj4bunYSBhIHbDoCBiIG1hbmcgdGhlbyDEkWnhu4F1IGtp4buHbiBzbWFsbGVyLCBsYXJnZXIgdMawxqFuZyDhu6luZwpsbCBtZW1vWzYwXVsyXVsyXVsyXVsyXTsKCmxsIGRwKGludCBpZHgsIGJvb2wgbGFyZ2VyX2EsIGJvb2wgc21hbGxlcl9hLCBib29sIGxhcmdlcl9iLCBib29sIHNtYWxsZXJfYikgewoJaWYgKGlkeCA9PSAtMSkgcmV0dXJuIDA7CgoJbGwmIGFucyA9IG1lbW9baWR4XVtsYXJnZXJfYV1bc21hbGxlcl9hXVtsYXJnZXJfYl1bc21hbGxlcl9iXTsgCglpZiAoYW5zICE9IC0xKSByZXR1cm4gYW5zOyAgIAoKCWFucyA9IDA7ICAKCWludCBtaW5fZGlnaXRfYSA9IChsYXJnZXJfYSkgPyAwIDogZGlnaXRfbFtpZHhdOyAKCWludCBtYXhfZGlnaXRfYSA9IChzbWFsbGVyX2EpID8gMSA6IGRpZ2l0X3JbaWR4XTsgCglpbnQgbWluX2RpZ2l0X2IgPSAobGFyZ2VyX2IpID8gMCA6IGRpZ2l0X2xbaWR4XTsgCglpbnQgbWF4X2RpZ2l0X2IgPSAoc21hbGxlcl9iKSA/IDEgOiBkaWdpdF9yW2lkeF07IAoKCWZvciAoaW50IGFfaSA9IG1pbl9kaWdpdF9hOyBhX2kgPD0gbWF4X2RpZ2l0X2E7IGFfaSsrKSB7CgkJZm9yIChpbnQgYl9pID0gbWluX2RpZ2l0X2I7IGJfaSA8PSBtYXhfZGlnaXRfYjsgYl9pKyspIHsKCQkJbGwgdmFsID0gKGFfaSBeIGJfaSkgKiAoMWxsIDw8IGlkeCk7IAoJCQltYXhpbWl6ZShhbnMsIHZhbCArIGRwKGlkeCAtIDEsIGxhcmdlcl9hIHwgKGFfaSA+IGRpZ2l0X2xbaWR4XSksIHNtYWxsZXJfYSB8IChhX2kgPCBkaWdpdF9yW2lkeF0pLCAKCQkJCQkJCQkJCQlsYXJnZXJfYiB8IChiX2kgPiBkaWdpdF9sW2lkeF0pLCBzbWFsbGVyX2IgfCAoYl9pIDwgZGlnaXRfcltpZHhdKSkpOyAKCQl9Cgl9CgoJcmV0dXJuIGFuczsgCn0KCmxsIHNvbHZlKGxsIGwsIGxsIHIpIHsKCWRpZ2l0X2wgPSBnZXREaWdpdChsKTsgCglkaWdpdF9yID0gZ2V0RGlnaXQocik7IAoJd2hpbGUgKGRpZ2l0X2wuc2l6ZSgpIDwgZGlnaXRfci5zaXplKCkpIGRpZ2l0X2wucHVzaF9iYWNrKDApOyAKCW1lbXNldChtZW1vLCAtMSwgc2l6ZW9mIG1lbW8pOyAKCXJldHVybiBkcChkaWdpdF9yLnNpemUoKSAtIDEsIDAsIDAsIDAsIDApOyAKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCQoJbGwgbCwgcjsgCgljaW4gPj4gbCA+PiByOyAKCglsbCBhbnMgPSBzb2x2ZShsLCByKTsgCgoJY291dCA8PCBhbnMgPDwgJ1xuJzsKfQ==