#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using Int = long long; template ostream &operator<<(ostream &os, const pair &a) { return os << "(" << a.first << ", " << a.second << ")"; }; template ostream &operator<<(ostream &os, const vector &as) { const int sz = as.size(); os << "["; for (int i = 0; i < sz; ++i) { if (i >= 256) { os << ", ..."; break; } if (i > 0) { os << ", "; } os << as[i]; } return os << "]"; } template void pv(T a, T b) { for (T i = a; i != b; ++i) cerr << *i << " "; cerr << endl; } template bool chmin(T &t, const T &f) { if (t > f) { t = f; return true; } return false; } template bool chmax(T &t, const T &f) { if (t < f) { t = f; return true; } return false; } #define COLOR(s) ("\x1b[" s "m") constexpr int E = 40; Int easy[E + 1]; Int solve(Int L, Int R) { vector> ps, qs; { Int l = L, r = R; for (int e = 0; l < r; ++e) { if (l & 1LL << e) { ps.emplace_back(e, l); l += (1LL << e); } if (r & 1LL << e) { r -= (1LL << e); qs.emplace_back(e, r); } } assert(l == r); } Int ans = 0; for (int i = 0; i < (int)ps.size(); ++i) { ans += easy[ps[i].first]; if (i) ans += (1LL << ps[i].first); } for (int i = 0; i < (int)qs.size(); ++i) { ans += easy[qs[i].first]; if (i) ans += (1LL << qs[i].first); } if (ps.size() && qs.size()) { Int mn = 1LL << E; for (const auto &p : ps) for (const auto &q : qs) { const int e = max(p.first, q.first); Int x = p.second ^ q.second; x &= ~((1LL << e) - 1); chmin(mn, x); } ans += mn; } return ans; } int main() { for (int e = 0; e < E; ++e) { easy[e + 1] = 2 * easy[e] + (1LL << e); } cerr<<"easy = ";pv(easy,easy+(E+1)); // exper(); return 0; for (int numCases; ~scanf("%d", &numCases); ) { for (int caseId = 1; caseId <= numCases; ++caseId) { Int N, M; scanf("%lld%lld", &N, &M); const Int L = M; const Int R = M + N; const Int ans = solve(L, R); printf("%lld\n", ans); } #ifndef LOCAL break; #endif } return 0; }