public class Euler193 {
    public static void main(String[] args) {
        long limit = 1L << 50;
        int maxK = (int) Math.sqrt((double) limit);
        int[] mu = new int[maxK + 1];
        mu[1] = 1;
        boolean[] comp = new boolean[maxK + 1];
        int[] primes = new int[maxK / 5];
        int pc = 0;
        for (int i = 2; i <= maxK; i++) {
            if (!comp[i]) {
                primes[pc++] = i;
                mu[i] = -1;
            }
            for (int j = 0; j < pc; j++) {
                long v = (long) i * primes[j];
                if (v > maxK)
                    break;
                comp[(int) v] = true;
                if (i % primes[j] == 0) {
                    mu[(int) v] = 0;
                    break;
                }
                mu[(int) v] = -mu[i];
            }
        }
        long count = 0;
        for (long k = 1; k <= maxK; k++)
            if (mu[(int) k] != 0)
                count += mu[(int) k] * (limit / (k * k));
        System.out.println(count);
    }
}
