#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,m;
scanf("%d%d",&n,&m);
int sum=0;
m=min(m,32); //因为n<=10^9,所以m最多只能取32
for(int i=m;i>=0;i--){
long long _2i=pow(2,i);
sum+=(n/_2i);
if(n%_2i==0) break;
n%=_2i;
}
printf("%d\n",sum);
}
}
1.如果要xi的和最小,同时满足前一个式子,则必须让xm尽可能大;
2.如果xm能够恰好被n整除,那就取这个值;如果不能就不断取余再除,直到除尽;
3.因为题目给的m范围也是<=10^9,但事实上m最大只能取32;