#include <bits/stdc++.h>
long long MD = 1000000007;
long long sume(long long x) {
  long long x1 = x % MD;
  long long x2 = (x + 1) % MD;
  return (x1 * x2) % MD;
}
long long sumo(long long x) {
  long long x1 = x % MD;
  return (x1 * x1) % MD;
}
int main() {
  long long l, r;
  scanf("%lld %lld", &l, &r);
  l--;
  long long takl = 0;
  long long jbtl = 0;
  long long takr = 0;
  long long jbtr = 0;
  long long bigsum = 1;
  long long count = 1;
  long long swp = 1;
  long long flagl = 0, flagr = 0;
  while (true) {
    if (swp % 2 == 1) {
      if (flagl == 0) {
        takl += count;
        if (bigsum >= l) {
          flagl = 1;
          takl -= bigsum - l;
        }
      }
      if (flagr == 0) {
        takr += count;
        if (bigsum >= r) {
          flagr = 1;
          takr -= bigsum - r;
        }
      }
    } else {
      if (flagl == 0) {
        jbtl += count;
        if (bigsum >= l) {
          flagl = 1;
          jbtl -= bigsum - l;
        }
      }
      if (flagr == 0) {
        jbtr += count;
        if (bigsum >= r) {
          flagr = 1;
          jbtr -= bigsum - r;
        }
      }
    }
    if (bigsum >= r) break;
    swp++;
    count *= 2;
    bigsum += count;
  }
  long long ansl = (sume(jbtl) + sumo(takl)) % MD;
  long long ansr = (sume(jbtr) + sumo(takr)) % MD;
  long long ans = (ansr - ansl + MD) % MD;
  printf("%lld", ans);
  return 0;
}
