#include <vector>
#include <iostream>
#include <bitset>
typedef long long int ll;
using namespace std;

ll l, r;
bitset<60> L, R;
ll memo[60][2][2][2];
void init(ll l, ll r){
  L = bitset<60> (l);
  R = bitset<60> (r);
  //std::cout << L << '\n';
  //std::cout << R << '\n';
  for(int i=0;i<60;i++) for(int j=0;j<2;j++) for(int k=0;k<2;k++)for(int t=0;t<2;t++) memo[i][j][k][t] = -1;
}
ll f(ll pos, int flagX, int flagY, int flagZ){
  if(pos==-1) return 1;
  if(memo[pos][flagX][flagY][flagZ]!=-1) return memo[pos][flagX][flagY][flagZ];
  ll ret = 0;

  if(flagX||!L[pos]) ret += f(pos-1, flagX, (R[pos]?1:flagY), flagZ);
  if((flagX||!L[pos])&&(flagY||R[pos])&&flagZ) ret += f(pos-1, flagX, flagY, flagZ);
  if(flagY||R[pos]) ret += f(pos-1, (!L[pos]?1:flagX), flagY, 1);
  ret %= 1000000007;
  return memo[pos][flagX][flagY][flagZ] = ret;
}
int main(int argc, char const *argv[]) {
  std::cin >> l >> r;
  init(l, r);
  std::cout << (f(59, 0, 0, 0)) << '\n';
  return 0;
}
