#include<bits/stdc++.h>
using namespace std;
#define int unsigned long long;
const int maxn=3e5+10;
int n,m;
int a[maxn],b[maxn];
int ke(int lm,int sum){
if(sum%lm) return sum/lm+1;
return sum/lm;
}
bool check(int lm) {
int num = 0;
for (int i=1;i<=n;i++){
int now;
if(m*max(a[i],b[i])<lm) num+=m,now=lm-m*max(a[i],b[i]);
else num+=ke(max(a[i],b[i]),lm),now=0;
num+=ke(b[i],now);
}
return num<=n*m;
}
signed main(){
cin>>n>>m;
int l = 1 , r=1e18;
for(int i = 1; i <= n; i ++ ){
cin>>a[i];
}
for(int i = 1; i <= n; i ++ ){
cin>>b[i];
}
while(l<=r){
int mid = (l+r)/2;
if (check(mid)) l = mid+1;
else r = mid-1;
}
cout<<r<<endl;
return 0;
}