A little girl loves problems on bitwise operations very much. Here's one of them.

You are given two integers *l* and *r*. Let's consider the values of <img align="middle" class="tex-formula" src="https://espresso.codeforces.com/9b77fab607849cb208cd8aab633b62d894fc3358.png" style="max-width: 100.0%;max-height: 100.0%;"/> for all pairs of integers *a* and *b* (*l* ≤ *a* ≤ *b* ≤ *r*). Your task is to find the maximum value among all considered ones.

Expression <img align="middle" class="tex-formula" src="https://espresso.codeforces.com/b364f2e04c665b78b924ec10666327a4ef4635bc.png" style="max-width: 100.0%;max-height: 100.0%;"/> means applying bitwise excluding or operation to integers *x* and *y*. The given operation exists in all modern programming languages, for example, in languages *C*++ and *Java* it is represented as "^", in *Pascal* — as "xor".
The single line contains space-separated integers *l* and *r* (1 ≤ *l* ≤ *r* ≤ 10<sup class="upper-index">18</sup>).

Please, do not use the %lld specifier to read or write 64-bit integers in C++. It is preferred to use the cin, cout streams or the %I64d specifier.
l, r = map(int, input().split())

#ans = 0
#i1 = j1 = 0
#for i in range(l, r + 1):
#    for j in range(i, r + 1):
#        if ans < (i ^ j):
#            ans = (i ^ j)
#            i1 = i
#            j1 = j
#print(bin(i1)[2:], i1)
#print(bin(j1)[2:], j1)
#print(ans)

r_b = list(bin(r)[2:])
l_b = list(bin(l)[2:])
lt = ['0' for _ in range(len(r_b) - len(l_b))]
l_b = lt + l_b
#print(r_b)
#print(l_b)

yes = 0
for i in range(len(l_b)):
    if r_b[i] == '1' and l_b[i] == '1':
        if yes:
            l_b[i] = '0'
        else:
            r_b[i] = '0'
            if int("".join(r_b), 2) < l:
                r_b[i] = '1'
    elif r_b[i] == '0' and l_b[i] == '0':
        l_b[i] = '1'
        if int("".join(l_b), 2) > r:
            l_b[i] = '0'
        else:
            yes = 1
#print(l_b)
a = int("".join(l_b), 2)
b = int("".join(r_b), 2)
print(a ^ b)