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.
import time
import sys
import math
import heapq as hp
#hp.heapify hp.heappush hp.heappop

from collections import deque
#appendleft append pop popleft

#BITWISE: and:& or:| not:~ XOR:^  
input=sys.stdin.readline
m=1000000007
def inp():
    return int(input())
def minp():
    return map(int,input().split())
def strinp():
    S=input().rstrip()
    return S
def lst():
    return list(map(int,input().split()))

def primelist(n):
    history = [True] * n
    p = []
    for i in range(2, n):
        if history[i]:
            p.append(i)
            for j in range(i * i, n, i):
                history[j] = False
    return p
 
#------------------------------------#

l,r=minp()
if l==r:
    print(0)
else:
    xor=l^r
    xor=bin(xor)[2:]
    print(2**len(xor)-1)