#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define l(a, b, i) for (ll i = a; i < b; i++)
#define rl(a, b, i) for (ll i = a; i >= b; i--)
#define vpair vector<pair<ll, ll>>
#define inf LLONG_MAX
#define ninf LLONG_MIN
bool meow(ll X, ll N, ll M, vector<ll> &vecA, vector<ll> &vecB) {
ll maxtotal = N * M; // tổng số lessons accross các môn
ll cnt = 0; // nếu lát cnt > maxtotal thì false
ll maxindi = M; // max số lesson mà được đến lớp của từng môn
l(1, N + 1, i) {
//ll cur = 0; // cur knowledge of this subject
bool pon; // môn này có đi học k, hay pon :D
if (vecB[i] > vecA[i]) pon = true;
else pon = false;
if (pon) {
ll days = X / vecB[i];
if (X % vecB[i] != 0) days++;
cnt += days;
}
else if (!pon) {
ll schooldays = X / vecA[i];
if (X % vecA[i] != 0) schooldays++;
if (schooldays > maxindi) {
ll days = maxindi;
ll left = X - (maxindi * vecA[i]);
ll homedays = left / vecB[i];
if (left % vecB[i] != 0) homedays++;
days += homedays;
cnt += days;
}
else cnt += schooldays;
}
}
return (cnt <= maxtotal);
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
//freopen("selfstudy.inp", "r", stdin);
//freopen("selfstudy.out", "w", stdout);
ll N, M; cin >> N >> M; vector<ll> vecA(N + 1, 0), vecB(N + 1, 0);
l(1, N + 1, i) cin >> vecA[i];
l(1, N + 1, i) cin >> vecB[i];
ll lo = 0, hi = 1e16, ans = 0;
while (lo <= hi) {
ll mid = (lo + hi) / 2;
if (meow(mid, N, M, vecA, vecB)) {
ans = mid;
lo = mid + 1;
}
else hi = mid - 1;
}
cout << ans;
}