#include <iostream>
#include<vector>
using namespace std;
bool check(int n,long long a,long long b){
long long total=(long long)n*n;
long long max=(total+1)/2;
long long min=(total)/2;
if((a<=max&&b<=min)||(a<=min&&b<=max)){
return true;
}else{
return false;
}
}
int main(){
int T; // 测试用例数量
cin>>T; // 读取测试用例数量
// 创建二维向量存储每个测试用例的两个整数
vector<vector<int>>arr(T,vector<int>(2));
// 读取每个测试用例的两个整数
for(int i=0;i<T;i++){
cin>>arr[i][0]>>arr[i][1];
}
// 处理每个测试用例
for(int i=0;i<T;i++){
long long a=arr[i][0]; // 第一个参数
long long b=arr[i][1]; // 第二个参数
// 二分查找的左右边界
long long left=1,right=200000;
long long answer=200000; // 初始化答案为右边界
// 二分查找过程
while(left<=right){
long long mid=(left+right)/2; // 计算中间值
// 检查mid是否满足条件
if(check(mid,a,b)){
answer=mid; // 更新答案
right=mid-1; // 尝试寻找更小的满足条件的值
}else{
left=mid+1; // 增大mid值继续寻找
}
}
// 输出每个测试用例的答案
cout<<answer<<endl;
}
return 0;
}