"use strict";
    
const main = arg => {
    arg = arg.trim().split("\n");
    const A = parseInt(arg[0].split(" ")[0]);
    const B = parseInt(arg[0].split(" ")[1]);
    
    let answer = 0;
    
    // 偶数Nについて、
    // (NとN+1の排他的論理和)は必ず 1 になる
    // なので真ん中はほぼ考える必要が無い
    
    // 先頭奇数、終わりも奇数なら 先頭の奇数だけ余る
    if(A % 2 !== 0 && B % 2 !== 0) {
        if(((B - A) / 2) % 2 === 0) {
            answer = A;  
        } else {
            answer = 1 ^ A;
        }
    }
    
    // 先頭奇数、終わりは偶数なら先頭と終わりだけ残る
    if(A % 2 !== 0 && B % 2 === 0) {
        answer = A ^ B;   
    }
    
    // 先頭偶数、終わり奇数なら、0
    if(A % 2 === 0 && B % 2 !== 0) {
        answer = 0;  
    }
    
    // 先頭偶数、終わり偶数なら、1と終わりのみ残る
    if(A % 2 === 0 && B % 2 === 0) {
        if(((B - A) / 2) % 2 === 0) {
            answer = B;   
        } else {
            answer = 1 ^ B;
        }
    }
    
    console.log(answer);
}
main(require('fs').readFileSync('/dev/stdin', 'utf8'));