a,b=map(int,input().split())
def func(n,m):# 0<=i<=mのiを二進数表示した時、2^nのくらいが1となるiの個数。のiで(i//2^n)%2=1となるiの個数<=>i//2^nが奇数
  c=m//pow(2,n)
  d=m%pow(2,n)
  # m=c*pow(2,n)+d
  if c%2==0:
    return pow(2,n)*(c//2)
  else:
    return pow(2,n)*((c-1)//2)+d+1
i=0
while pow(2,i)<=b:
  i+=1
maxn=i
ans=0
for i in range(maxn+1):
  e=func(i,b)-func(i,max(0,a-1))
  if e%2==1:
    ans+=pow(2,i)
print(ans) a,b=map(int,input().split()) a map(int,input().split()) map int input().split() ().split () input split b def func(n,m):# 0<=i<=mのiを二進数表示した時、2^nのくらいが1となるiの個数。のiで(i//2^n)%2=1となるiの個数<=>i//2^nが奇数
  c=m//pow(2,n)
  d=m%pow(2,n)
  # m=c*pow(2,n)+d
  if c%2==0:
    return pow(2,n)*(c//2)
  else:
    return pow(2,n)*((c-1)//2)+d+1 func c=m//pow(2,n) c m//pow(2,n) m pow(2,n) pow 2 n d=m%pow(2,n) d m%pow(2,n) m pow(2,n) pow 2 n if c%2==0:
    return pow(2,n)*(c//2)
  else:
    return pow(2,n)*((c-1)//2)+d+1 c%2==0 c%2 c 2 0 return pow(2,n)*(c//2) pow(2,n)*(c//2) pow(2,n) pow 2 n c//2 c 2 return pow(2,n)*((c-1)//2)+d+1 pow(2,n)*((c-1)//2)+d+1 pow(2,n)*((c-1)//2)+d pow(2,n)*((c-1)//2) pow(2,n) pow 2 n (c-1)//2 c-1 c 1 2 d 1 n n m m i=0 i 0 while pow(2,i)<=b:
  i+=1 pow(2,i)<=b pow(2,i) pow 2 i b i+=1 i 1 maxn=i maxn i ans=0 ans 0 for i in range(maxn+1):
  e=func(i,b)-func(i,max(0,a-1))
  if e%2==1:
    ans+=pow(2,i) i range(maxn+1) range maxn+1 maxn 1 e=func(i,b)-func(i,max(0,a-1)) e func(i,b)-func(i,max(0,a-1)) func(i,b) func i b func(i,max(0,a-1)) func i max(0,a-1) max 0 a-1 a 1 if e%2==1:
    ans+=pow(2,i) e%2==1 e%2 e 2 1 ans+=pow(2,i) ans pow(2,i) pow 2 i print(ans) print ans a,b=map(int,input().split()) map(int,input().split()) a i=0 0 i ans+=pow(2,i) pow(2,i) ans def func(n,m):# 0<=i<=mのiを二進数表示した時、2^nのくらいが1となるiの個数。のiで(i//2^n)%2=1となるiの個数<=>i//2^nが奇数
  c=m//pow(2,n)
  d=m%pow(2,n)
  # m=c*pow(2,n)+d
  if c%2==0:
    return pow(2,n)*(c//2)
  else:
    return pow(2,n)*((c-1)//2)+d+1 def func(n,m):# 0<=i<=mのiを二進数表示した時、2^nのくらいが1となるiの個数。のiで(i//2^n)%2=1となるiの個数<=>i//2^nが奇数
  c=m//pow(2,n)
  d=m%pow(2,n)
  # m=c*pow(2,n)+d
  if c%2==0:
    return pow(2,n)*(c//2)
  else:
    return pow(2,n)*((c-1)//2)+d+1 func b=map(int,input().split()) map(int,input().split()) b i+=1 1 i maxn=i i maxn ans=0 0 ans e=func(i,b)-func(i,max(0,a-1)) func(i,b)-func(i,max(0,a-1)) e
a,b=map(int,input().split())
def func(n,m):# 0<=i<=mのiを二進数表示した時、2^nのくらいが1となるiの個数。のiで(i//2^n)%2=1となるiの個数<=>i//2^nが奇数
  c=m//pow(2,n)
  d=m%pow(2,n)
  # m=c*pow(2,n)+d
  if c%2==0:
    return pow(2,n)*(c//2)
  else:
    return pow(2,n)*((c-1)//2)+d+1
i=0
while pow(2,i)<=b:
  i+=1
maxn=i
ans=0
for i in range(maxn+1):
  e=func(i,b)-func(i,max(0,a-1))
  if e%2==1:
    ans+=pow(2,i)
print(ans)
