#include <iostream> #include <cmath> using namespace std; int main() { int m,n; while(cin>>m>>n){ if(m==0&&n==0) break; int tp = m; int level = 0; while(tp<n){ level++; tp = 2*tp + 1; // 最右下边边的点 } // get level ! int full = pow(2,level) - 1; int remain,tp2 = m; // tp2定位到子树最后未满层的第一个结点 while(level--){ tp2 *= 2; } if(tp2>n){ remain = 0; }else{ remain = n - tp2 + 1; } cout<<full+remain<<endl; } } // 64 位输出请用 printf("%lld")