import sys input = lambda :sys.stdin.readline()[:-1] ni = lambda :int(input()) na = lambda :list(map(int,input().split())) yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES") no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO") ####################################################################### """ gcd(a, b + x) >= M a = 12 g | a であって g | b + x となる g の最大値 ある g >= M が存在して g | a g | b + x """ N = 10 ** 5 + 1 n, k = na() a = na() b = na() div = [[] for i in range(N)] for i in range(1, N): for j in range(i, N, i): div[j].append(i) def check(M): s = 0 for i in range(n): z = 10 ** 12 for g in div[a[i]][::-1]: if g < M: break z = min(z, (-b[i]) % g) s += z if s > k: return False # print(M, s) return s <= k ok = 0 ng = 10 ** 5 + 10 while abs(ok - ng) > 1: mid = ok + ng >> 1 if check(mid): ok = mid else: ng = mid print(ok)