Problem: If an integer a is divisible by another integer b, then b is called the divisor of a.

For example: 12 has positive 6 divisors. They are 1, 2, 3, 4, 6 and 12.

Let’s define a function D(n) — number of integers between 1 and n (inclusive) which has exactly four positive divisors.

Between 1 and 10 only the integers 6, 8 and 10 has exactly four positive divisors. So, D(10) = 3.

You are given an integer n. You have to calculate D(n).

Input

The only line contains integer n (1 ≤ n ≤ 1011) — the parameter from the problem statement.

Output

Print the only integer c — the number of integers between 1 and n with exactly four divisors.

Examples

Input

10


Output

3


Input

20


Output

5

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
int Set(int N, int pos) { return N = N | (1 << pos); }
int reset(int N, int pos) { return N = N & ~(1 << pos); }
bool check(int N, int pos) { return (bool)(N & (1 << pos)); }
namespace pcf {
long long dp[100][100010];
unsigned int ar[(10000010 >> 6) + 5] = {0};
int len = 0, primes[666666], counter[10000010];
void Sieve() {
  (((ar[(0) >> 6]) |= (1 << (((0) >> 1) & 31)))),
      (((ar[(1) >> 6]) |= (1 << (((1) >> 1) & 31))));
  for (int i = 3; (i * i) < 10000010; i++, i++) {
    if (!(((ar[(i) >> 6]) & (1 << (((i) >> 1) & 31))))) {
      int k = i << 1;
      for (int j = (i * i); j < 10000010; j += k)
        (((ar[(j) >> 6]) |= (1 << (((j) >> 1) & 31))));
    }
  }
  for (int i = 1; i < 10000010; i++) {
    counter[i] = counter[i - 1];
    if ((((i) && ((i)&1) &&
          (!(((ar[((i)) >> 6]) & (1 << ((((i)) >> 1) & 31)))))) ||
         ((i) == 2)))
      primes[len++] = i, counter[i]++;
  }
}
void init() {
  Sieve();
  for (int n = 0; n < 100; n++) {
    for (int m = 0; m < 100010; m++) {
      if (!n)
        dp[n][m] = m;
      else
        dp[n][m] = dp[n - 1][m] - dp[n - 1][m / primes[n - 1]];
    }
  }
}
long long int phi(long long int m, int n) {
  if (n == 0) return m;
  if (primes[n - 1] >= m) return 1;
  if (m < 100010 && n < 100) return dp[n][m];
  return phi(m, n - 1) - phi(m / primes[n - 1], n - 1);
}
long long int Lehmer(long long m) {
  if (m < 10000010) return counter[m];
  long long int w, res = 0;
  int i, a, s, c, x, y;
  s = sqrt(0.9 + m), y = c = cbrt(0.9 + m);
  a = counter[y], res = phi(m, a) + a - 1;
  for (i = a; primes[i] <= s; i++)
    res = res - Lehmer(m / primes[i]) + Lehmer(primes[i]) - 1;
  return res;
}
}  // namespace pcf
bool Notprime[3200000];
int main() {
  Notprime[1] = true;
  for (int i = 2; (i * i) < 3200000; i++) {
    if (Notprime[i] == true) continue;
    for (int j = i * 2; j < 3200000; j += i) Notprime[j] = true;
  }
  long long int n;
  scanf("%lld", &n);
  long long int ans = 0;
  pcf::init();
  for (long long int i = 2; (i * i * i) <= n; i++) {
    if (Notprime[i] == false) ans++;
  }
  for (long long int i = 2; (i * i) <= n; i++) {
    if (Notprime[i]) continue;
    ans += pcf::Lehmer(n / i) - pcf::Lehmer(i);
  }
  cout << ans;
  return 0;
}