n, k = list(map(int, input().split())) A = list(map(int, input().split())) B = list(map(int, input().split())) C = [[] for _ in range(n)] D = [[] for _ in range(n)] P = [[] for _ in range(10**5+1)] for i in range(2, 10**5+1): for j in range(i, 10**5+1, i): P[j].append(i) for i in range(n): a, b = A[i], B[i] if a == 1: print(1) exit() S = [(-1, 0)] for p in P[a]: if not b % p: cost = 0 else: cost = p - b % p while S and S[-1][0] >= cost: S.pop() S.append((cost, p)) for cost, p in S[1:]: C[i].append(cost) D[i].append(p) from bisect import bisect_left as bs l = 1 r = 10 ** 5 + 2 while r - l > 1: m = (l + r) >> 1 t = 0 for i in range(n): if D[i][-1] < m: r = m break else: t += C[i][bs(D[i], m)] else: if t <= k: l = m else: r = m print(l)