import math def merge_intervals(cards): intervals = [] for a in cards: start = a * a end = (a + 1) * (a + 1) - 1 intervals.append((start, end)) if not intervals: return [] intervals.sort() merged = [intervals[0]] for current in intervals[1:]: last = merged[-1] if current[0] <= last[1] + 1: new_start = last[0] new_end = max(last[1], current[1]) merged[-1] = (new_start, new_end) else: merged.append(current) return merged def is_in_intervals(x, intervals): left = 0 right = len(intervals) - 1 while left <= right: mid = (left + right) // 2 s, e = intervals[mid] if s <= x <= e: return True elif x < s: right = mid - 1 else: left = mid + 1 return False def is_possible(t, s_intervals, b_intervals): divisors = set() for i in range(1, int(math.isqrt(t)) + 1): if t % i == 0: divisors.add(i) divisors.add(t // i) for x in divisors: if is_in_intervals(x, s_intervals): y = t // x if is_in_intervals(y, b_intervals): return True return False n, m = map(int, input().split()) a = list(map(int, input().split())) b = list(map(int, input().split())) s_intervals = merge_intervals(a) b_intervals = merge_intervals(b) if is_possible(1, s_intervals, b_intervals): t = 2 while True: if not is_possible(t, s_intervals, b_intervals): print(t) break t += 1 else: print(1)