import math def main(): import sys input = sys.stdin.read().split() ptr = 0 N = int(input[ptr]) ptr +=1 M = int(input[ptr]) ptr +=1 A = list(map(int, input[ptr:ptr+N])) ptr += N B = list(map(int, input[ptr:ptr+M])) ptr += M def generate_intervals(arr): intervals = [] for num in arr: start = num * num end = (num +1) **2 intervals.append( (start, end) ) return intervals def merge_intervals(intervals): if not intervals: return [] sorted_intervals = sorted(intervals, key=lambda x: x[0]) merged = [ list(sorted_intervals[0]) ] for current in sorted_intervals[1:]: last = merged[-1] if current[0] <= last[1]: last[1] = max(last[1], current[1]) else: merged.append( list(current) ) return [ (interval[0], interval[1]) for interval in merged ] x_intervals = generate_intervals(A) y_intervals = generate_intervals(B) merged_x = merge_intervals(x_intervals) merged_y = merge_intervals(y_intervals) starts_x = [ interval[0] for interval in merged_x ] ends_x = [ interval[1] for interval in merged_x ] starts_y = [ interval[0] for interval in merged_y ] ends_y = [ interval[1] for interval in merged_y ] def is_in(num, starts, ends): left = 0 right = len(starts) -1 res = -1 while left <= right: mid = (left + right) //2 if starts[mid] <= num: res = mid left = mid +1 else: right = mid -1 if res == -1: return False return ends[res] > num def get_divisors(s): divisors = set() for i in range(1, int(math.isqrt(s)) +1): if s % i ==0: divisors.add(i) divisors.add(s//i) return divisors s = 1 while True: divisors = get_divisors(s) found = False for d in divisors: # Check d is x, s/d is y if is_in(d, starts_x, ends_x) and is_in(s // d, starts_y, ends_y): found = True break # Check s/d is x, d is y if is_in(s // d, starts_x, ends_x) and is_in(d, starts_y, ends_y): found = True break if not found: print(s) return s +=1 if __name__ == '__main__': main()