#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
// - Đặt f(a, b) = Tổng xor từ a đến b = a ^ (a + 1) ^ (a + 2) ^ ... ^ (b - 1) ^ b
// => f(a, b) = f(0, b) ^ f(0, a - 1)
// => Bài toán đưa về chỉ cần quan tâm đến f(0, n) = Tổng xor từ 0 đến n = 0 ^ 1 ^ 2 ^ ... ^ (n - 1) ^ n
// - Để tính f(0, n) thì ta có nhiều cách như dp digit hay math
// - Ngoài ra còn có cách đơn giản hơn nhưng phải ra được nhận xét sau:
// "Tổng xor của 4 số liên tiếp có dạng 4k, 4k + 1, 4k + 2, 4k + 3 (k >= 0) bằng 0"
// ll f(ll n) {
// int len = (n + 1) % 4;
// ll ans = 0;
// for (ll i = n - len + 1; i <= n; i++) {
// ans ^= i;
// }
// return ans;
// }
ll f(ll n) {
if (n % 4 == 0) return n;
if (n % 4 == 1) return 1;
if (n % 4 == 2) return n + 1;
return 0;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll a, b;
cin >> a >> b;
ll ans = f(b) ^ f(a - 1);
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKLy8gLSDEkOG6t3QgZihhLCBiKSA9IFThu5VuZyB4b3IgdOG7qyBhIMSR4bq/biBiID0gYSBeIChhICsgMSkgXiAoYSArIDIpIF4gLi4uIF4gKGIgLSAxKSBeIGIKLy8gPT4gZihhLCBiKSA9IGYoMCwgYikgXiBmKDAsIGEgLSAxKQovLyA9PiBCw6BpIHRvw6FuIMSRxrBhIHbhu4EgY2jhu4kgY+G6p24gcXVhbiB0w6JtIMSR4bq/biBmKDAsIG4pID0gVOG7lW5nIHhvciB04burIDAgxJHhur9uIG4gPSAwIF4gMSBeIDIgXiAuLi4gXiAobiAtIDEpIF4gbgovLyAtIMSQ4buDIHTDrW5oIGYoMCwgbikgdGjDrCB0YSBjw7Mgbmhp4buBdSBjw6FjaCBuaMawIGRwIGRpZ2l0IGhheSBtYXRoIAovLyAtIE5nb8OgaSByYSBjw7JuIGPDsyBjw6FjaCDEkcahbiBnaeG6o24gaMahbiBuaMawbmcgcGjhuqNpIHJhIMSRxrDhu6NjIG5o4bqtbiB4w6l0IHNhdToKLy8gICAiVOG7lW5nIHhvciBj4bunYSA0IHPhu5EgbGnDqm4gdGnhur9wIGPDsyBk4bqhbmcgNGssIDRrICsgMSwgNGsgKyAyLCA0ayArIDMgKGsgPj0gMCkgYuG6sW5nIDAiIAkJCQkKCi8vIGxsIGYobGwgbikgewovLyAJaW50IGxlbiA9IChuICsgMSkgJSA0OyAgCi8vIAlsbCBhbnMgPSAwOyAgIAovLyAJZm9yIChsbCBpID0gbiAtIGxlbiArIDE7IGkgPD0gbjsgaSsrKSB7Ci8vIAkJYW5zIF49IGk7IAovLyAJfQovLyAJcmV0dXJuIGFuczsKLy8gfQoKbGwgZihsbCBuKSB7CglpZiAobiAlIDQgPT0gMCkgcmV0dXJuIG47ICAgCglpZiAobiAlIDQgPT0gMSkgcmV0dXJuIDE7ICAKCWlmIChuICUgNCA9PSAyKSByZXR1cm4gbiArIDE7ICAKCXJldHVybiAwOyAKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCQoJbGwgYSwgYjsgCgljaW4gPj4gYSA+PiBiOyAKCWxsIGFucyA9IGYoYikgXiBmKGEgLSAxKTsgCgljb3V0IDw8IGFucyA8PCAnXG4nOyAKfQ==