Problem:
Score : 700 points

Problem Statement

10^{10^{10}} participants, including Takahashi, competed in two programming contests.
In each contest, all participants had distinct ranks from first through 10^{10^{10}}-th.

The score of a participant is the product of his/her ranks in the two contests.

Process the following Q queries:

In the i-th query, you are given two positive integers A_i and B_i. Assuming that Takahashi was ranked A_i-th in the first contest and B_i-th in the second contest, find the maximum possible number of participants whose scores are smaller than Takahashi's.

Constraints

1 \leq Q \leq 100

1\leq A_i,B_i\leq 10^9(1\leq i\leq Q)

All values in input are integers.

Input

Input is given from Standard Input in the following format:

Q
A_1 B_1
:
A_Q B_Q

Output

For each query, print the maximum possible number of participants whose scores are smaller than Takahashi's.

Sample Input 1

8
1 4
10 5
3 3
4 11
8 9
22 40
8 36
314159265 358979323

Sample Output 1

1
12
4
11
14
57
31
671644785

Let us denote a participant who was ranked x-th in the first contest and y-th in the second contest as (x,y).

In the first query, (2,1) is a possible candidate of a participant whose score is smaller than Takahashi's. There are never two or more participants whose scores are smaller than Takahashi's, so we should print 1.

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i,n) for(long long i=0; i<(n); i++)
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }

/*
int main(){
    ll q; cin>>q;
    rep(i,q){
        ll a,b; cin>>a>>b;
        ll res=a+b-2;
        map<ll,ll> mp;
        if(a<b) swap(a,b);
        ll before=-1;
        for(ll i=a-1; i>0; i--){
            ll x=(a*b-1)/i;
            if(x<=b){
                res--;
                mp[x]=1;
                continue;
            }
            if(before==-1) before=x;
            else if(x==before) res--;
            else if(x==before+1) before++;
            else break;
        }
        before=-1;
        for(ll i=b-1; i>0; i--){
            ll x=(a*b-1)/i;
            if(x<=a){
                if(mp[a]==0) res--;
                continue;
            }
            if(before==-1) before=x;
            else if(x==before) res--;
            else if(x==before+1) before++;
            else break;
        }
        cout<<res<<endl;
    }
    return 0;
}
*/

int main(){
    ll q; cin>>q;
    rep(i,q){
        ll a,b; cin>>a>>b;
        if(a<b) swap(a,b);
        double sq = sqrt(a*b);
        ll res=sqrt(a*b);
        if(sq==res){
            res--; res+=b-1;
            res+=min(sqrt(a*b)-b-1, a-1-sqrt(a*b));
        }else{
            res+=b-1;
            res+=min(sqrt(a*b)-b, a-1-sqrt(a*b));
        }
        cout<<res<<endl;
    }
}