def Eratosthenes_is_prime_list(N): #N以下の素数のリストを返す #iが素数のときis_prime_list[i]=1,それ以外は0 N+=1 is_prime_list = [True]*N is_prime_list[0], is_prime_list[1] = False, False for j in range(4,N,2): is_prime_list[j] = False m = int(N**0.5)+1 for i in range(3,m,2): if is_prime_list[i]: is_prime_list[i*i::2*i]=[False]*((N-i*i-1)//(2*i)+1) return is_prime_list L,R = map(int,input().split()) M = 2*10**6 + 10 lst = Eratosthenes_is_prime_list(M) ans = 0 for a in range(L,R+1): if lst[a]: ans += 1 if a+1 <= R and lst[2*a+1]: ans += 1 print(ans)