#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int long long

int Q;

/*
    [a, a + 1, a + 2, ..., a + len - 1]
    [b, b - 1, b - 2, ..., b - len + 1]
    の積の最大を三分探索で求める
 */
bool leq_max(int a, int b, int len, int mx) {
    if (len == 1) return ll(a) * b < mx;
    if (len == 2) return max<ll>(ll(a) * b, ll(a + 1) * (b - 1)) < mx;
    if (ll(a) * b >= mx) return false;
    if ((ll(a) + len - 1) * (ll(b) - len + 1) >= mx) return false;
    ll hi = (b - a) / 2;
    // if (hi < 0 or hi >= len) return true;
    // bool ue_ni_totu = ll(a) * b < ll(a + 1) * (b - 1);

    function<ll(int)> f = [&](int idx) {
        // cout << idx << ' ' << a + idx << ' ' << b - idx << endl;
        return ll(a + idx) * (b - idx);
    };

    // int hi = len - 1, lo = 0;
    // for (int i = 0; i < 100; ++i) {
    //     int m1 = (lo * 2 + hi) / 3;
    //     int m2 = (lo + hi * 2) / 3;
    //     // if (m1 < 0) cout << len << ' ' << m1 << ' ' << m2 << endl;
    //     if (ue_ni_totu) {
    //         if (f(m1) > f(m2)) {
    //             lo = m1;
    //         } else {
    //             hi = m2;
    //         }
    //     } else {
    //         if (f(m1) < f(m2)) {
    //             lo = m1;
    //         } else {
    //             hi = m2;
    //         }
    //     }
    // }

    for (int i = hi - 10000; i < hi + 10000; ++i) {
        if (i >= 0 and i <= len - 1) {
            if (f(i) >= mx) return false;
        }
        // if (i >= a and i <= a + len - 1) {
        //     if (f(i - a) >= mx) return false;
        // }
    }
    return true;
    // cout << hi << ' ' << lo << ' ' << f(hi) << endl;
    // return f(hi) < mx;
}

bool check(int X, const int A, const int B) {

    bool ret = true;
    bool A_in = A <= X;
    bool B_in = B <= X;

    if (A == 1) {
        if (B_in) {
            ret &= leq_max(2, X + 1, X - B + 1, A * B);
            ret &= leq_max(X - B + 2, B - 1, B - 1, A * B);
        } else {
            ret &= leq_max(2, X, X, A * B);
        }
    } else if (A_in and B_in) {
        if ((A - 1) + (B - 1) == X) {   // 2つに分解
            ret &= leq_max(1, X + 1, A - 1, A * B);
            ret &= leq_max(A + 1, B - 1, X - (A - 1), A * B);
            // cout << A - 1 << ' ' << X - (A - 1) << endl;
        } else {                        // 3つに分解
            if (X - (A - 2) - (B - 2) < 0) {
                ret &= leq_max(1, X + 1, X - B + 1, A * B);
                ret &= leq_max(X - B + 2, B - 1, (A - 1) - (X - B + 2) + 1, A * B);
                ret &= leq_max(A + 1, X - (X - B + 1) - ((A - 1) - (X - B + 2) + 1), X - (X - B + 1) - ((A - 1) - (X - B + 2) + 1),  A * B);
            } else {
                ret &= leq_max(1, X + 1, A - 2, A * B);
                ret &= leq_max(A - 1, B - 1, X - (A - 2) - (B - 2), A * B);
                ret &= leq_max(A + 1, X - (A - 1), B - 2, A * B);
                // cout << A << ' ' << B << endl;
                // cout << A + 1 << ' ' << X - (A - 1) << endl;
                // cout << X << ' ' << A - 2 << ' ' << X - (A - 2) - (B - 2) << ' ' << B - 2 << endl;
            }
        }
    } else if (A_in) {
        ret &= leq_max(1, X, A - 1, A * B);
        ret &= leq_max(A + 1, X - A + 1, X - A + 1, A * B);
        // cout << A - 1 << ' ' << X - A + 1 << endl;
    } else if (B_in) {
        ret &= leq_max(1, X + 1, X - B + 1, A * B);
        ret &= leq_max(X - B + 2, B - 1, B - 1, A * B);
        // cout << X - B + 1 << ' ' << B - 1 << endl;
    } else {
        ret &= leq_max(1, X, X, A * B);
    }

    return ret;

}

void solve(int A, int B) {
    // 解説放送の方針 (何ペア作れるかを二分探索)
    ll ok = 0, ng = 1e10;
    while (abs(ok - ng) > 1) {
      ll mid = (ok + ng) / 2;
      if (check(mid, A, B)) {
        ok = mid;
      } else {
        ng = mid;
      }
    }
    cout << ok << endl;
}

signed main() {

    cin >> Q;

    // cout << check(6, 1, 18) << endl;
    // cout << check(673138586, 314159265, 358979323) << endl;
    // cout << leq_max(1, 15, 10, 65) << endl;
    // return 0;

    while (Q--) {
        int A, B;
        cin >> A >> B;
        solve(A, B);
    }

}

Measured memory_bytes: 764