#!/usr/bin/env python3 import math import random def find_min_factor(n): assert n > 0 if n % 2 == 0: return 2 for i in range(3, n, 2): if i * i > n: return n elif n % i == 0: return i def is_prime_miller_rabin(n, k=30): assert n > 0 if n == 2: return True elif n == 1 or n % 2 == 0: return False d = n - 1 s = 0 while d % 2 == 0: d //= 2 s += 1 for i in range(k): a = random.randint(1, n - 1) if pow(a, d, n) != 1: for r in range(0, s): if pow(a, d * 2 ** r, n) == n - 1: break else: return False return True def solve(l, h): answer = 0 max_min_factor = 0 # c = p * d # c (>= 4) : a composite number # p (>= 2) : a prime number # d (>= 2) : an integer for p in range(2, math.floor(math.sqrt(h)) + 1)[:: -1]: if p < max_min_factor: break elif h // p * p < l or not is_prime_miller_rabin(p): continue for d in range(p, h // p + 1)[:: -1]: c = p * d if l > c: break f = find_min_factor(c) if max_min_factor < f or max_min_factor == f and answer < c: max_min_factor = f answer = c return answer def main(): l, h = map(int, input().split()) print(solve(l, h)) if __name__ == '__main__': main()