#include <bits/stdc++.h>
using namespace std;
using ll = long long;

// https://atcoder.jp/contests/abc138/submissions/7075855 を参考

#define mod 1000000007

// y と x は2進数で同じ桁数である必要がある
// このとき, y % x = y - x
// 繰り下がりが無いことが必要十分

ll L, R;
int dp[61][2][2][2];

// 現在の桁, Lの制約の有無, Rの制約の有無, 桁数が合ってるかどうか
int solve(int i, bool L_Free, bool R_Free, bool flag){
    if(i == -1) return 1;
    int &res = dp[i][L_Free][R_Free][flag];
    if(res != -1) return res;
    res = 0;

    int lX = 0, rX = 1, lY = 0, rY = 1;
    if (! L_Free) lX = (L >> i) & 1;
    if (! R_Free) rY = (R >> i) & 1;

    for (int x = lX; x <= rX; ++x) {
        for (int y = lY; y <= rY; ++y) {
            if (x <= y && (flag || x == y) ) {
              res += solve(i-1, L_Free | (x > lX), R_Free | (y < rY), flag | (x == 1));
              res %= mod;
            }
        }
    }
    return res;
}

int main() {
    cin >> L >> R;
    memset(dp, -1, sizeof dp);
    cout << solve(60, 0, 0, 0);
    return 0;
}