from bisect import bisect_left def make_divisors(n): lower_divisors, upper_divisors = [], [] i = 1 while i**2 <= n: if n % i == 0: lower_divisors.append(i) if i != n // i: upper_divisors.append(n // i) i += 1 return lower_divisors + upper_divisors[::-1] N, K = map(int, input().split()) A = list(map(int, input().split())) B = list(map(int, input().split())) divs = [make_divisors(a) for a in A] cums = [[1 << 60] * len(divs[i]) for i in range(N)] for i in range(N): div = divs[i] cum = cums[i] for k in range(len(div)): d = div[k] cum[k] = (B[i] + d - 1) // d * d - B[i] for k in range(len(div) - 1, 0, -1): cum[k - 1] = min(cum[k], cum[k - 1]) ok = 1 ng = 10**11 while ng - ok > 1: mid = (ok + ng) // 2 cnt = 0 for i in range(N): idx = bisect_left(divs[i], mid) if idx == len(divs[i]): cnt = K + 1 break cnt += cums[i][idx] if cnt <= K: ok = mid else: ng = mid print(ok)