#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MOD=1e9+7;
int L,R,Mx[101],Mi[101],dp[101][2][2][2];
int DFS(int pos,bool limit,bool lead,bool is) {
	if(pos==0)return !lead;
	if(dp[pos][limit][lead][is]!=-1)return dp[pos][limit][lead][is];
	int up=limit?Mx[pos]:1;
	int tmp=0;
	if(is||Mi[pos]==0)tmp+=DFS(pos-1,limit&&Mx[pos]==0,lead,is);
	if(up){
		tmp+=DFS(pos-1,limit,false,is||(Mi[pos]==0));
		if(!lead&&(is||Mi[pos]==0))tmp+=DFS(pos-1,limit&&Mx[pos]==1,false,is);
	}	
	tmp%=MOD;
	dp[pos][limit][lead][is]=tmp;
	return tmp;
}
int solve() {
	while(R)Mx[++Mx[0]]=R&1,R=R>>1;
	while(L)Mi[++Mi[0]]=L&1,L=L>>1;
//	for(int i=1; i<=Mx[0]; i++)cout<<Mx[i]<<" ";
//	cout<<endl;
//	for(int i=1; i<=Mi[0]; i++)cout<<Mi[i]<<" ";
//	cout<<endl;
	return DFS(Mx[0],true,true,false);
}
signed main() {
	memset(dp,-1,sizeof(dp));
	scanf("%lld %lld",&L,&R);
	cout<<solve();
//	for(int i=1; i<=Mx[0]; i++)cout<<dp[i][0]<<" "<<dp[i][1]<<endl;
	return 0;
}