import math def sieve(n): sieve = [True] * (n + 1) sieve[0] = sieve[1] = False for i in range(2, int(math.sqrt(n)) + 1): if sieve[i]: sieve[i*i::i] = [False] * len(sieve[i*i::i]) primes = [i for i, is_p in enumerate(sieve) if is_p] return primes def count_square_free(L, R): primes = sieve(10**6) size = R - L + 1 is_square_free = [True] * size for p in primes: s = p * p if s > R: continue start = ((L + s - 1) // s) * s if start > R: continue for k in range(start, R + 1, s): idx = k - L is_square_free[idx] = False for i in range(size): if is_square_free[i]: x = L + i root = math.isqrt(x) if root * root == x: if root > 1: is_square_free[i] = False return sum(is_square_free) L, R = map(int, input().split()) print(count_square_free(L, R))