# coding: utf-8

# https://atcoder.jp/contests/abc121


def main():
    A, B = map(int, input().split())

    def xor_1_to_x(x):
        output = [0] * 40

        for k in range(40):
            output[k] = (2**k)*((x+1)//(2**(k+1)))
            output[k] += max(0, (x+1) - ((2**(k+1))*((x+1)//(2**(k+1))) + (2**k)))

        return output

    xor_B = xor_1_to_x(B)
    xor_A_m1 = xor_1_to_x(A-1)
    xor_AtoB = [None] * 40
    for k in range(40):
        xor_AtoB[k] = xor_B[k] - xor_A_m1[k]
        xor_AtoB[k] %= 2

    ans = 0
    for k in range(40):
        ans += xor_AtoB[k] * (2**k)

    return ans


print(main()) def main():
    A, B = map(int, input().split())

    def xor_1_to_x(x):
        output = [0] * 40

        for k in range(40):
            output[k] = (2**k)*((x+1)//(2**(k+1)))
            output[k] += max(0, (x+1) - ((2**(k+1))*((x+1)//(2**(k+1))) + (2**k)))

        return output

    xor_B = xor_1_to_x(B)
    xor_A_m1 = xor_1_to_x(A-1)
    xor_AtoB = [None] * 40
    for k in range(40):
        xor_AtoB[k] = xor_B[k] - xor_A_m1[k]
        xor_AtoB[k] %= 2

    ans = 0
    for k in range(40):
        ans += xor_AtoB[k] * (2**k)

    return ans main A, B = map(int, input().split()) A map(int, input().split()) map int input().split() ().split () input split B def xor_1_to_x(x):
        output = [0] * 40

        for k in range(40):
            output[k] = (2**k)*((x+1)//(2**(k+1)))
            output[k] += max(0, (x+1) - ((2**(k+1))*((x+1)//(2**(k+1))) + (2**k)))

        return output

     xor_1_to_x output = [0] * 40 output [0] * 40 [0] 0 40 for k in range(40):
            output[k] = (2**k)*((x+1)//(2**(k+1)))
            output[k] += max(0, (x+1) - ((2**(k+1))*((x+1)//(2**(k+1))) + (2**k)))

         k range(40) range 40 output[k] = (2**k)*((x+1)//(2**(k+1))) output[k] output k (2**k)*((x+1)//(2**(k+1))) 2**k 2 k (x+1)//(2**(k+1)) x+1 x 1 2**(k+1) 2 k+1 k 1 output[k] += max(0, (x+1) - ((2**(k+1))*((x+1)//(2**(k+1))) + (2**k))) output[k] output k max(0, (x+1) - ((2**(k+1))*((x+1)//(2**(k+1))) + (2**k))) max 0 (x+1) - ((2**(k+1))*((x+1)//(2**(k+1))) + (2**k)) x+1 x 1 (2**(k+1))*((x+1)//(2**(k+1))) + (2**k) (2**(k+1))*((x+1)//(2**(k+1))) 2**(k+1) 2 k+1 k 1 (x+1)//(2**(k+1)) x+1 x 1 2**(k+1) 2 k+1 k 1 2**k 2 k return output output x x xor_B = xor_1_to_x(B) xor_B xor_1_to_x(B) xor_1_to_x B xor_A_m1 = xor_1_to_x(A-1) xor_A_m1 xor_1_to_x(A-1) xor_1_to_x A-1 A 1 xor_AtoB = [None] * 40 xor_AtoB [None] * 40 [None] None 40 for k in range(40):
        xor_AtoB[k] = xor_B[k] - xor_A_m1[k]
        xor_AtoB[k] %= 2

     k range(40) range 40 xor_AtoB[k] = xor_B[k] - xor_A_m1[k] xor_AtoB[k] xor_AtoB k xor_B[k] - xor_A_m1[k] xor_B[k] xor_B k xor_A_m1[k] xor_A_m1 k xor_AtoB[k] %= 2 xor_AtoB[k] xor_AtoB k 2 ans = 0 ans 0 for k in range(40):
        ans += xor_AtoB[k] * (2**k)

     k range(40) range 40 ans += xor_AtoB[k] * (2**k) ans xor_AtoB[k] * (2**k) xor_AtoB[k] xor_AtoB k 2**k 2 k return ans ans print(main()) print main() main def main():
    A, B = map(int, input().split())

    def xor_1_to_x(x):
        output = [0] * 40

        for k in range(40):
            output[k] = (2**k)*((x+1)//(2**(k+1)))
            output[k] += max(0, (x+1) - ((2**(k+1))*((x+1)//(2**(k+1))) + (2**k)))

        return output

    xor_B = xor_1_to_x(B)
    xor_A_m1 = xor_1_to_x(A-1)
    xor_AtoB = [None] * 40
    for k in range(40):
        xor_AtoB[k] = xor_B[k] - xor_A_m1[k]
        xor_AtoB[k] %= 2

    ans = 0
    for k in range(40):
        ans += xor_AtoB[k] * (2**k)

    return ans def main():
    A, B = map(int, input().split())

    def xor_1_to_x(x):
        output = [0] * 40

        for k in range(40):
            output[k] = (2**k)*((x+1)//(2**(k+1)))
            output[k] += max(0, (x+1) - ((2**(k+1))*((x+1)//(2**(k+1))) + (2**k)))

        return output

    xor_B = xor_1_to_x(B)
    xor_A_m1 = xor_1_to_x(A-1)
    xor_AtoB = [None] * 40
    for k in range(40):
        xor_AtoB[k] = xor_B[k] - xor_A_m1[k]
        xor_AtoB[k] %= 2

    ans = 0
    for k in range(40):
        ans += xor_AtoB[k] * (2**k)

    return ans main
# coding: utf-8

# https://atcoder.jp/contests/abc121


def main():
    A, B = map(int, input().split())

    def xor_1_to_x(x):
        output = [0] * 40

        for k in range(40):
            output[k] = (2**k)*((x+1)//(2**(k+1)))
            output[k] += max(0, (x+1) - ((2**(k+1))*((x+1)//(2**(k+1))) + (2**k)))

        return output

    xor_B = xor_1_to_x(B)
    xor_A_m1 = xor_1_to_x(A-1)
    xor_AtoB = [None] * 40
    for k in range(40):
        xor_AtoB[k] = xor_B[k] - xor_A_m1[k]
        xor_AtoB[k] %= 2

    ans = 0
    for k in range(40):
        ans += xor_AtoB[k] * (2**k)

    return ans


print(main())
