N,K = map(int,input().split()) A = list(map(int,input().split())) B = list(map(int,input().split())) divs = [[] for _ in range(10**5+1)] for n in range(1,10**5+1): ds = set() m = 1 while m*m <= n: if n%m==0: ds.add(m) ds.add(n//m) m += 1 divs[n] = sorted(ds) def is_ok(k): c = 0 for a,b in zip(A,B): tmp = 10**18 for d in divs[a]: if d < k: continue tmp = min(tmp, -b%d) c += tmp if c > K: return False return True ng = 10**5+1 ok = 0 while ng-ok > 1: m = (ok+ng)//2 if is_ok(m): ok = m else: ng = m print(ok)