unittest
{
	assert( [ "2 4" ].solve == 5 );
	assert( [ "123 456" ].solve == 435 );
	assert( [ "123456789012 123456789012" ].solve == 123456789012 );
	
	assert( [ "0 1000000000000" ].solve == 1000000000000 );		// 追加ケース
	assert( [ "2 1000000000000" ].solve == 1000000000001 );		// 追加ケース
}



import std.conv;
import std.format;
import std.range;
import std.stdio;

void main()
{
	stdin.byLineCopy.solve.writeln;
}

auto solve( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto a = 0L;
	auto b = 0L;
	input.front.formattedRead!"%s %s"( a, b );
	
	// 範囲[i..j](i<jかつi%4==3かつj%4==3）の累積xorは必ず0になるので、途中の計算を省略できる
	auto ans = 0L;
	foreach( i; a .. ( a + 3 ) / 4 * 4 )
	{
		ans ^= i;
	}
	foreach( i; b / 4 * 4 .. b + 1 )
	{
		ans ^= i;
	}
	return ans;
}
