
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

vector<int> computeMobius(int maxN) {
    vector<int> mu(maxN + 1, 1);
    vector<int> spf(maxN + 1, 0);
    for(int i = 2; i <= maxN; ++i){
        if(spf[i] == 0){
            spf[i] = i;
            for(int j = i * i; j <= maxN; j += i){
                if(spf[j] == 0){
                    spf[j] = i;
                }
            }
        }
    }
    for(int i = 2; i <= maxN; ++i){
        if(spf[i/spf[i]] == spf[i]){
            mu[i] = 0;
        }
        else{
            mu[i] = -mu[i/spf[i]];
        }
    }
    return mu;
}

ll countSquareFree(ll N, const vector<int> &mu) {
    ll limit = sqrt(N);
    ll res = 0;
    for(ll k = 1; k <= limit; ++k){
        res += (ll)mu[k] * (N / (k * k));
    }
    return res;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T = 1;
    // cin >> T;
    int maxK = 31623;
    vector<int> mu = computeMobius(maxK);
    while(T--){
        ll l, r;
        cin >> l >> r;
        ll sf_r = countSquareFree(r, mu);
        ll sf_l_minus_1 = (l > 1) ? countSquareFree(l - 1, mu) : 0;
        ll answer = sf_r - sf_l_minus_1;
        if(l <=1 && r >=1){
            answer -=1;
        }
        cout << answer << "\n";
    }
}