//TLE版本
#include<iostream>
#include<cstdio>#include<cstring>
using namespace std;
int shz[1<<20];
//测试数据量超过一千一般不用模拟,会很费时间
//树的编号
//树状数组;结构指针树
//二叉树在数组里面是分层保存的(下标),第一层一个数值(1),第二层2个(2,3),第i1<<(i-1) 个数值(下标1<<(i-1)+1 到 1<<i -1,通过i乘以2 或者乘2加一可以完成树的遍历。
//当i为奇数,他是左走的(i+1)/2个小球,当他是偶数时,他是右走的i/2 个小球
int main(){
int a;
while(cin>>a&&a!=-1){
for(int i=0;i<a;i++){
int b,i1,k=1;
cin>>b>>i1;
for(int j=1;j<b;j++){
if(i1%2){
i1=(i1+1)/2;
k=k*2;
}
else{
i1=i1/2;
k=k*2+1;
}
}
printf("%d\n",k);
}
}
return 0;
}
//分析求解
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
//当i为奇数,他是左走的(i+1)/2个小球,当他是偶数时,他是右走的i/2 个小球
int main(){
int a;
while(cin>>a&&a!=-1){
for(int i=0;i<a;i++){
int b,i1,k=1;
cin>>b>>i1;
for(int j=1;j<b;j++){
if(i1%2){
i1=(i1+1)/2;
k=k*2;
}
else{
i1=i1/2;
k=k*2+1;
}
}
printf("%d\n",k);
}
}
return 0;
}