/* 2013-07-26 11:00:40.867169 */#include <cstdio>
#include <iostream>

using namespace std ;

const int MAXN = 1000 ;
int a[MAXN] , top = 0 ;

bool check_peri( long long x )
{
    int top = 0 ;
    while ( x )
    {
        a[top++] = x % 2 ;
        x >>= 1 ;
    }

    bool res = true ;
    for ( int l = 1 ; l < top ; ++l )
    if ( top % l == 0 )
    {
        res = true ;
        for ( int p = 0 ; p < l && res ; ++p )
        {
            for ( int j = p+l ; j < top && res ; j += l )
                if ( a[p] != a[j] )
                    res = false ;
        }

        if (res)
            return true ;
    }
    return false ;
}

long long f[MAXN] , g[MAXN] ;
int now[MAXN];

bool leq( int l )
{
    for ( int i = 1 ; i <= top ; ++i )
    {
        if ( a[top-i] != now[l-(i-1)%l-1] )
            return now[l-(i-1)%l-1] < a[top-i] ;
    }
    return true ;
}


long long dfs( int pos , int l )
{
    long long res = 0 ;

    if ( pos < l-1 && leq(l) )
    {
        if (pos>=0)
            return (1<<(1+pos));
        else
            return 1 ;
    }

    if ( pos >= 0 )
    {
        if ( pos < l-1 ) {
            now[pos] = 0 ;
            res += dfs( pos-1 , l );
        }
        if ( a[top-(l-pos)] != 0 )
        {
            now[pos] = 1 ;
            res += dfs( pos-1 , l );
        }
        return res ;
    }
    return 0;
}

long long getans( int l )
{
    long long res = 0 ;

    for( int i = 0 ; i < l ; ++i )
        now[i] = 1 ;

    res = dfs( l-1 , l );

    for ( int i = 1 ; i < l ; ++i )
        if ( l % i == 0 )
            res -= f[i] ;
    return res ;
}
long long solve( long long R )
{
    long long t = R ;

    top = 0 ;
    while ( t )
    {
        a[top++] = t&1;
        t>>=1;
    }

    long long res = 0 ;
    for ( int t = 1 ; t < top ; ++t )
    {
        f[t] = 0 ;
        if ( top%t == 0 )
            f[t] = getans(t);
        res += f[t] ;
//cout << R << ' ' << t << ' '<< f[t] << endl ;
    }

    return res ;
}

int main()
{
    long long L , R ;

    cin >> L >> R ;
/*
    {
       // burst
        long long ans1 = 0 ;
        for ( int i = L ; i <= R ; ++i )
        {
            if ( check_peri(i) )
            {
        //        cout << i << endl ;
                ans1++;
            }
        }
        cout << ans1 << endl ;
    }*/
    long long res = solve(R) - solve(L-1) ;
    long long x = 1 ;

    //cout << res << endl ;
    L--;
    while ( R )
    {
        R >>= 1 ;
        L >>= 1 ;

        if ( R && !L ){
            res += solve(x) ;
            //cout << x << ' ' << res << endl ;
        }
        x = 1+(x<<1) ;
    }

    cout << res ;


    return 0;
}
/***
1 1000000000000000000
*/
