package assignmnets;
import java.util.Scanner;
public class XOR_MaximumProfit {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scn = new Scanner(System.in);
int n1 = scn.nextInt();
int n2 = scn.nextInt();
int pos = 0;
int temp = n2;
while (temp > 0) {
pos++;
temp = temp >> 1;
}
pos--;
// System.out.println(pos);
long max_Xor = 0;
long xr = 0;
long num = (n2 - n1) + 1;
int vis = 0;
int shift = 0;
for (long i = 0; i < num; i++) {
int f_bit = getIthBit(n1, pos);
int s_bit = getIthBit(n2, pos);
xr = (f_bit ^ s_bit);
if (xr >= 1) {
max_Xor |= (1 << pos) & (~(0));
}
if (xr == 0 && vis != 0) {
if (f_bit == 0) {
int temp1 = set_Bit(n1, pos);
if (temp1 > n1 && temp1 <= n2) {
n1=temp1;
max_Xor |= (1 << pos) & (~(0));
}
}
if (s_bit == 1) {
int temp2 = set_Bit(n2, pos);
if (temp2 < n2 && temp2 >= n1) {
n2=temp2;
max_Xor |= (1 << pos) & (~(0));
}
}
}
pos--;
vis++;
}
System.out.println(max_Xor);
}
private static int set_Bit(int n1, int pos) {
// TODO Auto-generated method stub
int mask = (1 << pos);
return (n1 | pos);
}
public static int getIthBit(int n, int i) {
int mask = (1 << i);
return (n & mask);
}
}