#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")

京公网安备 11010502036488号