#include <bits/stdc++.h>
using namespace std;
long long max(long long a, long long b) {
  if (a > b) {
    return a;
  } else {
    return b;
  }
}
long long min(long long a, long long b) {
  if (a < b) {
    return a;
  } else {
    return b;
  }
}
vector<string> split(const string& s, char c) {
  vector<string> v;
  stringstream ss(s);
  string x;
  while (getline(ss, x, c)) v.emplace_back(x);
  return move(v);
}
void err(vector<string>::iterator it) {}
template <typename T, typename... Args>
void err(vector<string>::iterator it, T a, Args... args) {
  cerr << it->substr((*it)[0] == ' ', it->length()) << " = " << a << ", ";
  err(++it, args...);
}
template <typename T>
struct number_iterator : std::iterator<random_access_iterator_tag, T> {
  T v;
  number_iterator(T _v) : v(_v) {}
  operator T&() { return v; }
  T operator*() const { return v; }
};
template <typename T>
struct number_range {
  T b, e;
  number_range(T b, T e) : b(b), e(e) {}
  number_iterator<T> begin() { return b; }
  number_iterator<T> end() { return e; }
};
template <typename T>
number_range<T> range(T e) {
  return number_range<T>(1, e + 1);
}
template <typename T>
number_range<T> range(T b, T e) {
  return number_range<T>(b, e + 1);
}
long long c(long long len, long long b) {
  long long base = 1, tot = 0;
  for (int i = (1); i <= (len); i++) {
    if (i != b) tot += base;
    base *= 2;
  }
  return tot;
}
long long f(long long d) {
  if (d <= 1) return 0;
  long long res = 0;
  for (int i = (1); i <= (60); i++) {
    for (int j = (1); j <= (i - 1); j++) {
      if (c(i, j) <= d) res++;
    }
  }
  return res;
}
int main() {
  long long a, b;
  cin >> a >> b;
  long long ff = f(b) - f(a - 1);
  cout << ff << endl;
  return 0;
}
