#include<stdio.h>
int Jds(int m,int n)
{
int l,r,sum;
l=r=m;//左=右=m
for(sum=2;r*2+1<=n;)
{
sum=sum*2;
l=l*2;
r=r*2+1;
}
l=l*2;//找到最左边和最右边
if(l<=n)//如果最左边后面还有数,则加上去
sum=sum+n-l+1;
printf("%d\n",sum-1);
return 0;
}
int main()
{
int m,n;
while(scanf("%d%d",&m,&n)!=EOF)//最后一个节点是n
{
if(m==0&&n==0)
break;
Jds(m,n);
}
return 0;
}
/**************************************************************
Problem: 2190
User: admin
Language: C
Result: Accepted
Time:15 ms
Memory:1144 kb
****************************************************************/