int divide(int x) { int cnt =0; for (int i = 2 ; i *i <= x ; i ++) { if (x%i==0) { cnt++; x /= i; if (x%i==0) return -1; } } if (x!=1) cnt++; return cnt; }
ll quickpow(ll a, ll n) { ll res= 1; while (n) { if (n&1) res= res*a; a = a*a; n >>=1; } return res; }
ll solve(ll x) { ll rt = (ll)pow(n*1.0,1.0/x); if (quickpow(rt,x)<=n) { while (quickpow(rt+1,x)<=n&&rt+1<=up[x]) rt ++; } else { while (quickpow(rt,x)>n) rt--; } return rt-1; }
int main(){ init(); int T,t=1; while (~scanf("%lld",&n)) { ll ans = 0; for (int i = 2 ; i <= 63 ; i ++) { if (quickpow(2,i)>n) break; int cnt = divide(i); if (cnt==-1) continue; if (cnt&1) ans += solve(i); else ans -= solve(i); } printf("%lld\n",ans+1);