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