import math def main(): import sys input = sys.stdin.read data = input().split() idx = 0 N = int(data[idx]) M = int(data[idx+1]) idx +=2 A = list(map(int, data[idx:idx+N])) idx +=N B = list(map(int, data[idx:idx+M])) A.sort() B.sort() max_A = A[-1] if N else 0 max_B = B[-1] if M else 0 max_A_sq = (max_A + 1)**2 - 1 max_B_sq = (max_B + 1)**2 - 1 min_A_sq = A[0]**2 if N else 0 min_B_sq = B[0]**2 if M else 0 def is_in_A(x): low, high = 0, N-1 while low <= high: mid = (low + high) // 2 a = A[mid] a_sq = a * a next_sq = (a + 1) * (a + 1) if a_sq <= x < next_sq: return True elif x < a_sq: high = mid -1 else: low = mid +1 return False def is_in_B(y): low, high = 0, M-1 while low <= high: mid = (low + high) // 2 b = B[mid] b_sq = b * b next_sq = (b + 1) * (b + 1) if b_sq <= y < next_sq: return True elif y < b_sq: high = mid -1 else: low = mid +1 return False k = 1 while True: divisors = set() for i in range(1, int(math.isqrt(k)) +1): if k % i == 0: divisors.add(i) divisors.add(k//i) found = False for x in divisors: if x < min_A_sq or x > max_A_sq: continue y = k // x if y < min_B_sq or y > max_B_sq: continue if is_in_A(x) and is_in_B(y): found = True break if not found: print(k) return k +=1 if __name__ == "__main__": main()