import math from bisect import bisect_left LIMIT = 10**5 + 1 INF = 10**9 def factorize(n): factorized = [] for i in range(1, math.isqrt(n) + 1): if n % i == 0: factorized.append(i) factorized.append(n // i) if math.isqrt(n) ** 2 == n: factorized.pop() return factorized N, K = [int(s) for s in input().split()] A = [int(s) for s in input().split()] B = [int(s) for s in input().split()] need_op = [dict() for _ in range(N)] for i, (a, b) in enumerate(zip(A, B)): for fac in factorize(a): need_op[i][fac] = (fac - b) % fac min_cnt = INF for key in sorted(need_op[i], reverse=True): min_cnt = min(need_op[i][key], min_cnt) need_op[i][key] = min_cnt keys = [list(sorted(need_op[i])) for i in range(N)] def is_ok(mid): cnt = 0 for i, key in enumerate(keys): idx = bisect_left(key, mid) cnt += need_op[i][key[idx]] return cnt <= K ok, ng = 0, min(A) + 1 while abs(ok - ng) > 1: mid = (ok + ng) // 2 if is_ok(mid): ok = mid else: ng = mid print(ok)