#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define ull unsigned ll
#define ld long double
typedef vector<int> vi;
typedef multiset<int> mi;
typedef multiset<ll> mll;
typedef vector<ll> vll;
typedef vector<bool> vb;
typedef vector<string> vs;
typedef set<ll> sll;
typedef vector<vector<int>> _2vi;
typedef vector<vector<ll>> _2vll;
#define all(v) ((v).begin()), ((v).end())
#define sz(v) ((ll)((v).size()))

#define vinp(v, n)                \
    for (ull i = 0; i < (n); i++) \
    cin >> (v)[i]
#define printv(v)      \
    for (auto i : (v)) \
    cout << i << " "
#define fr0(i, n) for (ull(i) = 0; (i) < (n); (i)++)
#define fr1(i, n) for (ull(i) = 1; (i) < (n); (i)++)
#define fr(i, x, n) for (ull(i) = (x); (i) < (n); (i)++)
#define _CRT_SECURE_NO_WARNING
const ll MOD = 1000000007;

void Bustany() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
#ifndef ONLINE_JUDGE
    freopen("./in.txt", "r", stdin), freopen("./out.txt", "w", stdout);
#endif
}

const ll N = 1e5 + 5;
vector<sll> adj(N);
//_2vll adj(N,vll(N));
vb vis;

void solve() {
    ll a, b;
    cin >> a >> b;
    ll ans = 0;
    for (ll i = 0; i < 60; i++) {
        ll bit1 = ((1LL << i) & a);
        ll bit2 = ((1LL << i) & b);
//        cout << bit1 << " " << bit2 << endl;
        if (bit2 == 0 && bit1 != 0) {
            ans |= (1LL << i);
        } else if (bit1 != bit2) {
            ans = -1;
            break;
        }
    }
    cout << ans << endl;
}

int main() {
    Bustany();
    ll t = 1;
    cin >> t;
    while (t--) {
        solve();
    }
}