q=int(eval(input()))

ab=[list(map(int,input().split())) for _ in range(q)]

from math import floor

for a,b in ab:

  if a==b:

    print((2*a-2))

    continue

  t=floor((a*b)**0.5)

  # t,t+1 組み合わせの積がa*bで抑えられているかどうか

  if t*t>=a*b: # t*tもだめ

    print((2*t-3))

  elif t*(t+1)>=a*b: # t*(t+1)はだめ

    print((2*t-2))

  else: # t*tもt*(t+1)もOK

    print((2*t-1))

q=int(eval(input()))

ab=[list(map(int,input().split())) for _ in range(q)]

from math import floor

for a,b in ab:

    # a*bをぎりぎりまで攻めたい

    # (1,1)とかはもったいない。(1,a*b-1)は良い。片方は√a*b未満で、片方は√a*bより大きい組み合わせ。

    # a==bならa未満の整数yについて適切な数字xを選べばy*x<a*bとできる。xは他のxと被らないように選択できる。

    if a==b:

        print((2*a-2))

    else:

        # t,t+1 組み合わせの積がa*bで抑えられているかどうか。(t+1)*(t+1)は必ずa*bを超える。

        # t未満の自然数については適切な整数を選べばa*b以下にできる。

        t=floor((a*b)**0.5)

        # (1,2*t-1),(2,2*t-2),(3,(a*b-1)//3),...,(t-1,(a*b-1)//(t-1))

        if t*t>=a*b: 

            # (t,t),(t,t+1)はだめ。この条件を満たすのはt*t=a*b、a!=bのときのみ。t未満の数字と適切な数字を選べばよいが、t未満の数字の内一つはaなので、その分を引く。

            print((2*t-3))

        elif t*(t+1)>=a*b: 

            # (t,t)はOK。(t,t+1)はだめ。(t,t)をまず選ぶ。t未満の数字と適切な数字を選べばよいが、t未満の数字の内一つはaなので、その分を引く。

            print((2*t-2))

        else:

            # t*tもt*(t+1)もOK。(t,t+1),(t+1,t)をまず選ぶ。あとはt未満の数字と適切な数字を選べばよいが、t未満の数字の内一つはaなので、その分を引く。

            print((2*t-1))

q = int(eval(input()))
ab = [list(map(int, input().split())) for _ in range(q)]
from math import floor

for a, b in ab:
    if a == b:
        print((2 * a - 2))
        continue
    t = floor((a * b) ** 0.5)
    # t,t+1 組み合わせの積がa*bで抑えられているかどうか
    if t * t >= a * b:  # t*tもだめ
        print((2 * t - 3))
    elif t * (t + 1) >= a * b:  # t*(t+1)はだめ
        print((2 * t - 2))
    else:  # t*tもt*(t+1)もOK
        print((2 * t - 1))

q = int(eval(input()))
ab = [list(map(int, input().split())) for _ in range(q)]
from math import floor

for a, b in ab:
    # a*bをぎりぎりまで攻めたい
    # (1,1)とかはもったいない。(1,a*b-1)は良い。片方は√a*b未満で、片方は√a*bより大きい組み合わせ。
    # a==bならa未満の整数yについて適切な数字xを選べばy*x<a*bとできる。xは他のxと被らないように選択できる。
    if a == b:
        print((2 * a - 2))
    else:
        # t,t+1 組み合わせの積がa*bで抑えられているかどうか。(t+1)*(t+1)は必ずa*bを超える。
        # t未満の自然数については適切な整数を選べばa*b以下にできる。
        t = floor((a * b) ** 0.5)
        # (1,2*t-1),(2,2*t-2),(3,(a*b-1)//3),...,(t-1,(a*b-1)//(t-1))
        if t * t >= a * b:
            # (t,t),(t,t+1)はだめ。この条件を満たすのはt*t=a*b、a!=bのときのみ。t未満の数字と適切な数字を選べばよいが、t未満の数字の内一つはaなので、その分を引く。
            print((2 * t - 3))
        elif t * (t + 1) >= a * b:
            # (t,t)はOK。(t,t+1)はだめ。(t,t)をまず選ぶ。t未満の数字と適切な数字を選べばよいが、t未満の数字の内一つはaなので、その分を引く。
            print((2 * t - 2))
        else:
            # t*tもt*(t+1)もOK。(t,t+1),(t+1,t)をまず選ぶ。あとはt未満の数字と適切な数字を選べばよいが、t未満の数字の内一つはaなので、その分を引く。
            print((2 * t - 1))

+    # a*bをぎりぎりまで攻めたい +    # (1,1)とかはもったいない。(1,a*b-1)は良い。片方は√a*b未満で、片方は√a*bより大きい組み合わせ。 +    # a==bならa未満の整数yについて適切な数字xを選べばy*x<a*bとできる。xは他のxと被らないように選択できる。 -        continue -    t = floor((a * b) ** 0.5) -    # t,t+1 組み合わせの積がa*bで抑えられているかどうか -    if t * t >= a * b:  # t*tもだめ -        print((2 * t - 3)) -    elif t * (t + 1) >= a * b:  # t*(t+1)はだめ -        print((2 * t - 2)) -    else:  # t*tもt*(t+1)もOK -        print((2 * t - 1)) +    else: +        # t,t+1 組み合わせの積がa*bで抑えられているかどうか。(t+1)*(t+1)は必ずa*bを超える。 +        # t未満の自然数については適切な整数を選べばa*b以下にできる。 +        t = floor((a * b) ** 0.5) +        # (1,2*t-1),(2,2*t-2),(3,(a*b-1)//3),...,(t-1,(a*b-1)//(t-1)) +        if t * t >= a * b: +            # (t,t),(t,t+1)はだめ。この条件を満たすのはt*t=a*b、a!=bのときのみ。t未満の数字と適切な数字を選べばよいが、t未満の数字の内一つはaなので、その分を引く。 +            print((2 * t - 3)) +        elif t * (t + 1) >= a * b: +            # (t,t)はOK。(t,t+1)はだめ。(t,t)をまず選ぶ。t未満の数字と適切な数字を選べばよいが、t未満の数字の内一つはaなので、その分を引く。 +            print((2 * t - 2)) +        else: +            # t*tもt*(t+1)もOK。(t,t+1),(t+1,t)をまず選ぶ。あとはt未満の数字と適切な数字を選べばよいが、t未満の数字の内一つはaなので、その分を引く。 +            print((2 * t - 1))