#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(n); { vector check(1e5 + 1), p(1e5 + 1); vector> id(1e5 + 1); for (int i = 0; i < n; ++i) { check[a[i]] = 1; id[a[i]].push_back(i); } for (int i = 1; i <= 1e5; ++i) { if (!check[i]) continue; vector tmp; for (int j = 1; j * j <= i; ++j) { if (i % j == 0) { tmp.push_back(j); tmp.push_back(i / j); } } sort(tmp.begin(), tmp.end()); tmp.erase(unique(tmp.begin(), tmp.end()), tmp.end()); for (auto v : id[i]) d[v] = tmp; } } vector> nv(n); for (int i = 0; i < n; ++i) { int siz = d[i].size(); nv[i].push_back(b[i]); for (int j = 0; j < siz; ++j) { int tmp = (b[i] + d[i][j] - 1) / d[i][j] * d[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; }