#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
ll di(ll x){
  ll res=0;
  for(int i=0;i<62;i++){
    if(((x>>i)&1)==1) res=i;
  }
  return res+1;
}
const ll mod=1e9+7;
ll get_dp(ll L,ll R,ll D){
  ll dl=di(L),dr=di(R);
  if(dl>D||dr<D) return 0;
  ll dp[64][2][2]={0};
  if(dl==D){
    if(dr==D) dp[0][1][1]=1;
    else dp[0][1][0]=1;
  }
  else{
    if(dr==D) dp[0][0][1]=1;
    else dp[0][0][0]=1;
  }

  for(int i=1;i<D;i++){
    ll bl=((L>>(D-i-1))&1),br=((R>>(D-i-1))&1);
    if(bl==1){
      if(br==1){
        dp[i][0][0]=dp[i-1][0][0]*3+dp[i-1][0][1];
        dp[i][0][1]=dp[i-1][0][1]*2;
        dp[i][1][0]=dp[i-1][1][0];
        dp[i][1][1]=dp[i-1][1][1];
      }
      else{
        dp[i][0][0]=dp[i-1][0][0]*3;
        dp[i][0][1]=dp[i-1][0][1];
        dp[i][1][0]=dp[i-1][1][0];
      }
    }
    else{
      if(br==1){
        dp[i][0][0]=dp[i-1][0][0]*3+dp[i-1][0][1]+dp[i-1][1][0];
        dp[i][0][1]=dp[i-1][0][1]*2+dp[i-1][1][1];
        dp[i][1][0]=dp[i-1][1][0]*2+dp[i-1][1][1];
        dp[i][1][1]=dp[i-1][1][1];
      }
      else{
        dp[i][0][0]=dp[i-1][0][0]*3+dp[i-1][1][0];
        dp[i][0][1]=dp[i-1][0][1];
        dp[i][1][0]=dp[i-1][1][0]*2;
        dp[i][1][1]=dp[i-1][1][1];
      }
    }
    for(int j=0;j<2;j++){
      for(int k=0;k<2;k++) dp[i][j][k]%=mod;
    }
  }
  ll res=0;
  for(int j=0;j<2;j++){
    for(int k=0;k<2;k++) res+=dp[D-1][j][k];
  }
  return res%mod;
}
int main(){
  ll l,r;
  cin>>l>>r;
  ll ans=0;
  for(int i=1;i<62;i++){
    ans+=get_dp(l,r,i);
    ans%=mod;
  }
  cout<<ans<<endl;
}
