from collections import defaultdict def sieve(n): if n < 2: return [] sieve_list = [True] * (n + 1) sieve_list[0], sieve_list[1] = False, False for i in range(2, int(n ** 0.5) + 1): if sieve_list[i]: sieve_list[i*i : n+1 : i] = [False] * len(sieve_list[i*i : n+1 : i]) primes = [i for i, is_prime in enumerate(sieve_list) if is_prime] return primes def main(): K = int(input()) N = int(input()) primes_all = sieve(N) primes_in_range = [p for p in primes_all if K <= p <= N] if not primes_in_range: print() # Should not happen as per problem statement return hash_list = [9 if p % 9 == 0 else p % 9 for p in primes_in_range] max_length = 0 start_indices = [] left = 0 count = defaultdict(int) for right in range(len(hash_list)): current_hash = hash_list[right] # Move left pointer to ensure all hashes in window are unique while count[current_hash] > 0: left_hash = hash_list[left] count[left_hash] -= 1 if count[left_hash] == 0: del count[left_hash] left += 1 count[current_hash] += 1 current_len = right - left + 1 if current_len > max_length: max_length = current_len start_indices = [left] elif current_len == max_length: start_indices.append(left) # Determine the maximum prime among the start indices max_prime = -1 for idx in start_indices: current_p = primes_in_range[idx] if current_p > max_prime: max_prime = current_p print(max_prime) if __name__ == "__main__": main()