#include namespace { #pragma GCC diagnostic ignored "-Wunused-function" #include #pragma GCC diagnostic warning "-Wunused-function" using namespace std; using namespace atcoder; #define rep(i,n) for(int i = 0; i < (int)(n); i++) #define rrep(i,n) for(int i = (int)(n) - 1; i >= 0; i--) #define all(x) begin(x), end(x) #define rall(x) rbegin(x), rend(x) template bool chmax(T& a, const T& b) { if (a < b) { a = b; return true; } else return false; } template bool chmin(T& a, const T& b) { if (b < a) { a = b; return true; } else return false; } using ll = long long; using P = pair; using VI = vector; using VVI = vector; using VL = vector; using VVL = vector; } int main() { ios::sync_with_stdio(false); cin.tie(0); int tt; cin >> tt; VL costs(35); for (int i = 1; i < 35; i++) { costs[i] = 2 * costs[i-1] + (1LL << (i - 1)); } auto f = [&](ll n) { if (n == 0) return 0LL; int k = __lg(n); ll ans = 0; rep(i, k + 1) if (n >> i & 1) { ans += costs[i]; } int pre = k; rrep(i, k) if (n >> i & 1) ans += 1LL << pre, pre = i; return ans; }; while (tt--) { ll n, m; cin >> n >> m; ll l = m, r = n + m; int k = __lg(l ^ r); ll c = r & ~((1LL << k) - 1); ll ans = f(r - c) + f(c - l); if (c < r) { ll k2 = 1LL << k; ll v = l ^ k2; ans += k2; if (v >= r) { ll mn = 1e18; ll now = 0; for (int i = k - 1; i >= 0; i--) { if (v >> i & 1) { ll nv = v ^ (1LL << i); if (nv < r) { chmin(mn, now + (1LL << i)); } else { now += 1LL << i; v = nv; } } } ans += mn; } } cout << ans << '\n'; } }