#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
long long L,R;
long long ans,md=1000000007;
long long dp[70][2][2][2][2];
long long dfs(int ws,bool ltb,bool rtb,bool lrtb,bool los){
	if(ws==-1)	return 1;
	if(dp[ws][ltb][rtb][lrtb][los])	return dp[ws][ltb][rtb][lrtb][los];
	int l=(L>>ws)&1,r=(R>>ws)&1;
	long long ret=0;
	for(int i=0;i<2;i++)
		for(int j=0;j<2;j++)
			if(!((j&i)!=j || (!ltb && j<l) || (!rtb && i>r) || (!lrtb && i<j) || (!los && i && i!=j)))
				(ret+=dfs(ws-1,ltb | (j>l),rtb | (i<r),lrtb | (j<i),los | j))%=md;
	dp[ws][ltb][rtb][lrtb][los]=ret;
	return ret;
}
int main(){
	scanf("%lld%lld",&L,&R);
	printf("%lld\n",dfs(62,false,false,false,false));
	return 0;
}