#include <iostream>
#include <algorithm>
using namespace std;
#define int long long
int n,m,ans=0,l=1,r=1e18,mid=0;
struct node
{
int a,b;
}a[300005]={};
int calc(int x,int e)
{
if(x%e==0)
{
return x/e;
}
else
{
return x/e+1;
}
}
bool check(int x)
{
int sum=0;
for(int i=1;i<=n;i++)
{
if(a[i].a>=a[i].b)
{
if(m*a[i].a>=x)
{
sum+=calc(x,a[i].a);
}
else
{
sum+=m;
sum+=calc(x-m*a[i].a,a[i].b);
}
}
else
{
sum+=calc(x,a[i].b);
}
if(sum>m*n)
{
return false;
}
}
return true;
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i].a;
}
for(int i=1;i<=n;i++)
{
cin>>a[i].b;
}
if(m==1&&n==1)
{
cout<<max(a[1].a,a[1].b);
exit(0);
}
while(l<=r)
{
mid=(l+r)/2;
if(check(mid))
{
l=mid+1;
ans=mid;
}
else
{
r=mid-1;
}
}
cout<<ans;
return 0;
}