把每个点看成两部分左子树与右子树
#include <iostream>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)&&n!=-1)
{
int a,b;
for(int i=0;i<n;i++)
{
scanf("%d%d",&a,&b);
int k=1;
for(int j=0;j<a-1;j++)
{
if(b%2){k*=2,b=(b+1)/2;}
else {k=k*2+1,b/=2;}
}
cout<<k<<endl;
}
}
return 0;
}