#include <cstdio>
long L, R, MOD=1e9+7;
long dp[66][2][2][2];

int main() {
	scanf("%ld%ld", &L, &R);

	dp[0][0][0][0] = 1;
	bool x[3] = {1, 0, 0}, y[3] = {1, 1, 0};

	for(int i = 0; i < 60; ++i) {
		bool lb = L>>(59-i)&1, rb = R>>(59-i)&1;

		for(int l = 0; l < 2; ++l)
			for(int r = 0; r < 2; ++r)
				for(int j = 0; j < 2; ++j)

					for(int k = 0; k < 3; ++k) {
						if(!l && !x[k] && lb) continue;
						if(!r && y[k] && !rb) continue;
						if(!j && x[k] ^ y[k]) continue;
						
						int nl = (x[k] ^ lb   ? 1 : l);
						int nr = (y[k] ^ rb   ? 1 : r);
						int nj = (x[k] & y[k] ? 1 : j);

						(dp[i+1][nl][nr][nj] += dp[i][l][r][j]) %= MOD;
					}

	}
	long ans = dp[60][0][0][1] + dp[60][0][1][1] + dp[60][1][0][1] + dp[60][1][1][1];
	printf("%ld\n", ans % MOD);
    return 0;
}
