import math def sieve(n): sieve = [True] * (n + 1) sieve[0] = sieve[1] = False for i in range(2, int(math.isqrt(n)) + 1): if sieve[i]: sieve[i*i : n+1 : i] = [False] * len(sieve[i*i : n+1 : i]) primes = [i for i, is_p in enumerate(sieve) if is_p] return primes def is_prime(n): if n <= 1: return False if n <= 3: return True if n % 2 == 0 or n % 3 == 0: return False i = 5 w = 2 while i * i <= n: if n % i == 0: return False i += w w = 6 - w return True def count_squarefree(L, R): primes = sieve(10**6) count = 0 for x in range(L, R + 1): if x == 0: continue if x == 1: count += 1 continue square_free = True for p in primes: p_sq = p * p if p_sq > x: break if x % p_sq == 0: square_free = False break if not square_free: continue s = math.isqrt(x) if s * s != x: count += 1 else: if s == 1: count += 1 else: if not is_prime(s): pass else: pass return count # Read input L, R = map(int, input().split()) print(count_squarefree(L, R))