#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
****************************************************************/