question
#include <bits/stdc++.h>
using namespace std;
int l,r;
int dp[35][35][2];//dp[第几位][0的个数][最高位] = 有多少个圆数
void Init(){
dp[1][1][0]=1;
for (int i=2;i<=32;i++){
for (int k=i;k>=0;k--){
dp[i][k][0]+=dp[i-1][k-1][0]+dp[i-1][k-1][1];
dp[i][k][1]+=dp[i-1][k][0]+dp[i-1][k][1];
}
}
}
int Num(int x){
int digit=0,a[40],ans=0;
memset(a,0,sizeof(a));
while (x){
a[++digit]=x%2;
x/=2;
}
for (int i=1;i<digit;i++){
for (int j=1;j<=i;j++){
if (j>=(i-1)/2+1){
ans+=dp[i][j][1];
}
}
}
for (int i=digit-1;i>=1;i--){
for (int j=0;j<a[i];j++){
for (int k=i;k>=0;k--){
if (k>=(i-1)/2+1){
ans+=dp[i][k][j];
}
}
}
}
return ans;
}
int main()
{
Init();
cin>>l>>r;
//cout<<Num(l+1)<<endl;
//cout<<Num(r+1)<<endl;
cout<<Num(r+1)-Num(l)<<endl;
return 0;
}