#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3f;
const int MOD = (int)1e9 + 7;
const int N = (int)-1;
long long L, R;
int dp[100][2][2][2][2];
int add(int a, int b) {
  a += b;
  if (a >= MOD) a -= MOD;
  return a;
}
int dfs(int len, int bl, int br, int cl, int have) {
  if (len == -1) {
    return 1;
  }
  if (dp[len][bl][br][cl][have] != -1) return dp[len][bl][br][cl][have];
  int kl = bl ? (L >> len & 1) : 0;
  int kr = br ? (R >> len & 1) : 1;
  int dl = cl ? (L >> len & 1) : 0;
  int re = 0;
  if (0 >= kl && 0 <= kr && !dl) {
    re = add(re,
             dfs(len - 1, bl && kl == 0, br && kr == 0, cl && kl == 0, have));
  }
  if (1 >= kl && 1 <= kr) {
    re = add(re, dfs(len - 1, bl && kl == 1, br && kr == 1, cl && kl == 1, 1));
    if (dl == 0 && have)
      re = add(dfs(len - 1, bl && kl == 1, br && kr == 1, cl, have), re);
  }
  return dp[len][bl][br][cl][have] = re;
}
int main() {
  memset(dp, -1, sizeof(dp));
  scanf("%lld%lld", &L, &R);
  printf("%d\n", dfs(61, 1, 1, 1, 0));
  return 0;
}
