#include using namespace std; #define rep(i, n) for(int i = 0; i < n; i++) #define rep2(i, x, n) for(int i = x; i <= n; i++) #define rep3(i, x, n) for(int i = x; i >= n; i--) #define each(e, v) for(auto &e: v) #define pb push_back #define eb emplace_back #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define sz(x) (int)x.size() using ll = long long; using pii = pair; using pil = pair; using pli = pair; using pll = pair; const int MOD = 1000000007; //const int MOD = 998244353; const int inf = (1<<30)-1; const ll INF = (1LL<<60)-1; template bool chmax(T &x, const T &y) {return (x < y)? (x = y, true) : false;}; template bool chmin(T &x, const T &y) {return (x > y)? (x = y, true) : false;}; struct io_setup{ io_setup(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout << fixed << setprecision(15); } } io_setup; int main(){ ll L, R; cin >> L >> R; int K = R-L; vector ok(K+1, true); ll M = 1000000; rep2(i, 1, M){ ll l = 1, r = inf; //(l,r] while(r-l > 1){ ll m = (l+r)/2; ll t = m*m; if(t > (L-1)/i) r = m; else l = m; } for(ll t = r; t*t*i <= R; t++){ ok[t*t*i-L] = false; } } vector ps(M+1, true); for(ll i = 2; i <= M; i++){ if(!ps[i]) continue; for(ll t = ((L+i-1)/i)*i; t <= R; t += i){ if(t%(i*i) == 0) ok[t-L] = false; } for(int j = i+i; j <= M; j += i){ ps[j] = false; } } int ans = 0; rep(i, K+1){ if(ok[i]) ans++; } cout << ans << '\n'; }