#include <bits/stdc++.h>
using namespace std;
const int N = 105;
long long l, r, dp[N];
long long gao(long long n) {
  long long m = n, ans = 0;
  int bit[N], len = 0;
  while (n) {
    bit[++len] = n % 2;
    n /= 2;
  }
  for (int i = 2; i < len; i++) {
    memset(dp, 0, sizeof(dp));
    dp[1] = 1;
    for (int j = 2; j < i; j++) {
      if (i % j) continue;
      dp[j] += 1LL << (j - 1);
    }
    for (int j = 1; j <= i; j++) {
      for (int k = 2; k * j < i; k++)
        if (i % (k * j) == 0) dp[j * k] -= dp[j];
    }
    for (int j = 1; j <= i; j++) ans += dp[j];
  }
  for (int i = len; i <= len; i++) {
    memset(dp, 0, sizeof(dp));
    for (int j = 1; j < i; j++) {
      if (i % j) continue;
      for (int k = len; k > len - j; k--) {
        if (k != len && bit[k] == 1) {
          dp[j] += 1LL << (k - (len - j) - 1);
        }
      }
      long long sum = 0;
      for (int k = len; k > len - j; k--) {
        if (bit[k] == 0) continue;
        for (int r = k; r > 0; r -= j) {
          sum += 1LL << (r - 1);
        }
      }
      if (sum <= m) dp[j]++;
    }
    for (int j = 1; j <= i; j++) {
      for (int k = 2; k * j < i; k++)
        if (i % (k * j) == 0) dp[j * k] -= dp[j];
    }
    for (int j = 1; j <= i; j++) ans += dp[j];
  }
  return ans;
}
int main() {
  while (cin >> l >> r) {
    cout << gao(r) - gao(l - 1) << endl;
  }
  return 0;
}
