#pragma GCC optimize("Ofast,unroll-loops")
#include <bits/stdc++.h>
#define ms(x, y) memset(x, y, sizeof x)
#define sp ,' ',
#define el ,'\n'
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int, int>;
using pil = pair<int, ll>;
template<typename... Args>
inline void out(Args... args) {
(cout << ... << args);
}
struct r {
template<typename T>
inline r& operator,(T& x) {
cin >> x;
return *this;
}
} in;
#define in in,
__int128_t n, m, a[300000], b[300000], l = 0, r = LLONG_MAX, ans, mid;
void solve() {
{ll a, b; in a, b; n = a; m = b;}
for (int i = 0; i < n; i++) {int x; in x; a[i] = x;}
for (int i = 0; i < n; i++) {int x; in x; b[i] = x;}
for (int i = 0; i < n; i++) a[i] = max(a[i], b[i]);
while (l <= r) {
mid = ((r - l) >> 1) + l;
__int128_t rem = 0;
for (int i = 0; i < n; i++) {
__int128_t cnt = (mid+a[i]-1) / a[i];
if (cnt <= m) rem += m - cnt;
else rem -= (mid - m*a[i] + b[i]-1) / b[i];
}
// out('\n');
// out(l sp mid sp r sp rem el);
if (rem >= 0) ans = mid, l = mid + 1;
else r = mid - 1;
}
out((ll)ans el);
}
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t = 1;
// in(t);
while (t--) solve();
}