#include using namespace std; #define rep(i, n) for (int i = 0; i < (int)(n); i++) templatebool chmax(T &x, T y){if(x>=y)return false;x=y;return true;} templatebool chmin(T &x, T y){if(x<=y)return false;x=y;return true;} int main(){ long long N, K; cin >> N >> K; vector A(N), B(N); rep(i, N)cin >> A[i]; rep(i, N)cin >> B[i]; vector> s(N); rep(i, N){ for(int j = 1; j*j <= A[i]; j++)if(A[i]%j==0){ s[i].push_back(j); if(A[i]!=j*j)s[i].push_back(A[i]/j); } sort(s[i].begin(), s[i].end()); } long long ok = 1, ng = 1234567890, mi; while(ng-ok>1){ mi = (ng+ok)/2; long long c = 0, d, at; rep(i, N){ d = 123456789012; at = lower_bound(s[i].begin(), s[i].end(), mi) - s[i].begin(); for(; at < s[i].size(); at++)chmin(d, (B[i]+s[i][at]-1)/s[i][at]*s[i][at]-B[i]); c += d; } if(c>K)ng = mi; else ok = mi; } cout << ok << endl; }