#include <iostream>
#include <math.h>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <iomanip>
#include <set>
#include <bitset>
#include <unordered_map>
#include <cstdlib>
#define int long long
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using piii = tuple<int,int,int>;
#define f first
#define s second
#define endl '\n'
#define all(x) begin(x),end(x)
vector<pii> vc;
int n,m;
bool check(int x){
int left = 0;
for(auto [a,b]:vc){
if(x <= a*m) left += m-(x-1)/a-1;
else left -= (x-a*m+b-1)/b;
}
return left>=0;
}
signed main(){
cin >> n;
cin >> m;
for(int i{};i < n;i++){
int g;
cin >> g;
vc.emplace_back(g,0);
}
for(int i{};i < n;i++) cin >> vc[i].s,vc[i].f = max(vc[i].f,vc[i].s);
int l = 1;
int r = 1e18+10;
int ans = r+1;
while(l <= r){
int md = l+(r-l)/2;
if(!check(md)) ans = min(ans,md),r = md-1;
else l = md+1;
}
cout << ans-1;
}