#include <iostream>
#include <cstring>
using namespace std;
int c[32][32];
void init() {
memset(c, 0, sizeof(c));
for (int i = 0; i < 32; i++) {
c[i][0] = 1;
for (int j = 1; j <= i; j++) {
c[i][j] = c[i-1][j-1] + c[i-1][j];
}
}
}
int sum(int l, int k) {
int ans = 0;
int max_aa = (l - k) / 2;
for (int i = 0; i <= max_aa; i++) {
ans += c[l][i];
}
return ans;
}
int solve(int x) {
if (x == 0) return 0;
int ans = 0;
bool bits[32] = {false};
int t = 0;
while (x != 0) {
bits[++t] = (x & 1);
x >>= 1;
}
for (int len = 1; len < t; len++) {
ans += sum(len - 1, 1);
}
int aa = 1;
int bb = 0;
for (int i = t - 1; i >= 1; i--) {
if (bits[i]) {
ans += sum(i - 1, aa - bb - 1);
aa++;
} else {
bb++;
}
}
if (aa <= bb) {
ans++;
}
return ans;
}
int main() {
init();
int l, r;
cin >> l >> r;
cout << solve(r) - solve(l - 1) << endl;
return 0;
}