#pragma GCC optimize("Ofast") #include #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; long long k; cin >> n >> k; vector a(n), b(n); for (int i = 0; i < n; ++i) cin >> a[i]; for (int i = 0; i < n; ++i) cin >> b[i]; vector> d(1e5 + 1); for (int i = 1; i <= 1e5; ++i) for (int j = 1; i * j <= 1e5; ++j) d[i * j].push_back(i); vector> nv(n); for (int i = 0; i < n; ++i) { int siz = d[a[i]].size(); nv[i].push_back(b[i]); for (int j = 0; j < siz; ++j) { int tmp = (b[i] + d[a[i]][j] - 1) / d[a[i]][j] * d[a[i]][j]; while (!nv[i].empty() && nv[i].back() >= tmp) nv[i].pop_back(); nv[i].push_back(tmp); } reverse(nv[i].begin(), nv[i].end()); nv[i].pop_back(); } priority_queue> pq; for (int i = 0; i < n; ++i) { int g = __gcd(a[i], b[i]); pq.push({-g, i}); } while (!pq.empty()) { auto [gv, id] = pq.top(); pq.pop(); if (nv[id].empty()) continue; int nb = nv[id].back(); nv[id].pop_back(); int c = nb - b[id]; if (k < c) break; b[id] = nb; k -= c; pq.push({-__gcd(a[id], b[id]), id}); } long long ans = 1e9; for (int i = 0; i < n; ++i) ans = min(ans, __gcd(a[i], b[i])); cout << ans << endl; }