#include<bits/stdc++.h>
#define int long long
using namespace std;
const int Inf=1e18;
int n,k;
int g[1000005][65];
int maxn=1e6;
int sol(int x){
int l=1,r=x;
int res=0;
while(l<r){
int mid=(l+r-1)/2;
res++;
if(mid-l+1>=r-mid){
r=mid;
}else{
l=mid+1;
}
}
return res;
}
signed main(){
for(int i=1;i<=maxn;i++)g[i][1]=1;
for(int j=2;j<=60;j++){
g[1][j]=1;
int sum=1;
int res;
for(int i=2;i<=maxn;i++){
g[i][j]=g[i-1][j]+g[i-1][j-1];
sum+=g[i][j];
res=i;
if(sum>=1e18)break;
}
}
int T;
cin>>T;
while(T--){
cin>>n>>k;
if(k>=60){
cout<<sol(n)<<endl;
continue;
}
if(n==1){
cout<<0<<endl;
continue;
}
n--;
if(k==1){
cout<<n+1<<endl;
}else if(k==2){
int l=1,r=2*sqrt(n);
while(l<r){
int mid=(l+r)/2;
if(mid*(mid+1)/2>=n){
r=mid;
}else{
l=mid+1;
}
}
cout<<l<<endl;
}else{
int sum=0;
for(int i=1;i<=maxn;i++){
sum+=g[i][k];
if(sum>=n){
cout<<i<<endl;
break;
}
}
}
}
return 0;
}
不知道为什么错了,感觉没什么问题