#include <bits/stdc++.h>
using namespace std;
using namespace chrono;
int main() {
int n,m; cin >> n >> m;
long long A[n], B[n];
for (auto& x : A) cin >> x;
for (auto& x : B) cin >> x;
for (int i = 0; i < n; i++)
A[i] = max(A[i], B[i]);
auto check = [&](long long x) {
long long need = 0;
for (int i = 0; i < n; i++) {
if (x <= m*A[i]) {
need += 1 + (x-1)/A[i];
} else {
need += m + 1 + (x - m*A[i] - 1)/B[i];
}
if (need > 1ll*n*m) { ;return false; };
}
return true;
};
long long l = 0, r = 1e18 + 1;
while (l+1 < r) {
auto mid = (l+r)/2;
(check(mid) ? l : r) = mid;
}
cout << l;
}