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 <iostream>
#include <cmath>
using namespace std;

int main() {
    ios::sync_with_stdio(false); cin.tie(0);
    int q; cin >> q;

    // case : 10 5 = 50
    // 1 * 49, 2 * 24, 3 * 16, 4 * 12, 5 * 9, 6 * 8, 7 * 7, 8 * 6, 9 * 5 (not), 
    // 10 * 4(not), 11 * 4, 12 * 4(not), 13 * 3, 14 * 3(not), 15 * 3(not), 16 * 3(not), 17 * 2, 18 * 2, 19 * 2, 20 * 2, 21 * 2, ..., 24 * 2, 25 * 1, ... 
    // ans : 12

    // c = a*b - 1
    // for(int i=1; i * i <= c; ++i) { long d = c / i; ans += (aが小さい場合); ans += (bが小さい場合) }
    // 可能な限り小さなa * 大きなb, 大きなa * 小さなbをcを超えないように選ぶ。
    // O(sqrt(c)) でできるが足りない。短縮する。
    // 結局 sqrt(c) * 2から、aが使われた場合、bが使われた場合、平方数が使われた場合それぞれ1を引けばいい？
    long a, b;
    while(q--) {
        cin >> a >> b;
        long c = a * b - 1;
        long d = (long)sqrt(c);
        long e = d * 2;
        if(a <= d) --e;
        if(b <= d) --e;
      
        // d * dはcを超えない最大の平方数か？
        long n1 = c - d * d, n2 = c - (d - 1) * d, n3 = c - (d + 1) * d;
        if(((n2 < 0) || (n1 < n2)) && ((n3 < 0) || (n1 < n3))) --e;
        cout << e << '\n';
    }
    return 0;
}