A number is called almost prime if it has exactly two distinct prime divisors. For example, numbers 6, 18, 24 are almost prime, while 4, 8, 9, 42 are not. Find the amount of almost prime numbers which are between 1 and n, inclusive.

Input

Input contains one integer number n (1 ≤ n ≤ 3000).

Output

Output the amount of almost prime numbers between 1 and n, inclusive.

Examples

Input

10


Output

2


Input

21


Output

8
#include <bits/stdc++.h>
using namespace std;
long long int power(long long int b, long long int e, long long int m) {
  if (e == 0) return 1;
  if (e % 2)
    return ((b % m) * power(((b % m) * (b % m)) % m, (e - 1) / 2, m)) % m;
  else
    return power((b % m) * (b % m), e / 2, m) % m;
}
long long int ncr(long long int n, long long int r) {
  long long int f1 = 1;
  for (long long int i = 1; i <= n; i++) {
    f1 = (f1 % 1000000007 * (i) % 1000000007) % 1000000007;
  }
  long long int f2 = 1;
  for (long long int i = 1; i <= r; i++) {
    f2 = (f2 % 1000000007 * (i) % 1000000007) % 1000000007;
  }
  long long int f3 = 1;
  for (long long int i = 1; i <= n - r; i++) {
    f3 = (f3 % 1000000007 * i % 1000000007) % 1000000007;
  }
  long long int k =
      (f1 % 1000000007 * power(f2, 1000000007 - 2, 1000000007) % 1000000007 *
       power(f3, 1000000007 - 2, 1000000007) % 1000000007) %
      1000000007;
  return k;
}
void dpv(vector<long long int> v) {
  for (long long int i = 0; i < v.size(); i++) {
    cout << v[i] << " ";
  }
  cout << '\n';
}
void dpv(vector<pair<long long int, long long int> > v) {
  for (long long int i = 0; i < v.size(); i++) {
    cout << v[i].first << " " << v[i].second << '\n';
  }
}
void dpv(set<long long int> v) {
  for (auto i : v) {
    cout << i << " ";
  }
  cout << '\n';
}
long long int Logn(long long int n, long long int k) {
  return (n > k - 1) ? 1 + Logn(n / k, k) : 0;
}
long long int max(long long int a, long long int b) {
  if (a > b) {
    return a;
  } else {
    return b;
  }
}
bool sortbysecdec(const pair<long long int, long long int> &a,
                  const pair<long long int, long long int> &b) {
  return (a.second < b.second);
}
long long int min(long long int a, long long int b) {
  if (a > b) {
    return b;
  } else {
    return a;
  }
}
bool prime[3000];
void Seive() {
  memset(prime, true, sizeof(prime));
  for (long long int i = 2; i <= 3000; i++) {
    if (prime[i]) {
      for (long long int j = 2 * i; j <= 3000; j += i) {
        prime[j] = false;
      }
    }
  }
}
long long int dp[3005];
void DP() {
  Seive();
  memset(dp, 0, sizeof(dp));
  dp[6] = 1;
  for (long long int i = 7; i <= 3000; i++) {
    long long int c = 0;
    set<long long int> s;
    for (long long int k = 2; k <= sqrt(i); k++) {
      if (i % k == 0) {
        if (k == i / k) {
          if (prime[k]) {
            c++;
          }
        } else {
          if (prime[k]) {
            c++;
          }
          if (prime[i / k]) {
            c++;
          }
        }
      }
    }
    if (c == 2) {
      dp[i] = dp[i - 1] + 1;
    } else {
      dp[i] = dp[i - 1];
    }
  }
}
void oblivious() {
  DP();
  long long int n;
  cin >> n;
  cout << dp[n] << '\n';
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long int t = 1;
  while (t--) {
    oblivious();
  }
  return 0;
}
