#include<bits/stdc++.h>
using namespace std;
using ll = unsigned long long;
const ll N = 3e5 + 2;
ll a[N], b[N], val[N], n, m;
bool Solve(ll X) {
	ll i, s, r, left = n * m;
	for (i = 1; i <=n; i ++){
		val[i] = X;
		if ( a[i] >= b[i]) {
			s = a[i] * m; 
			if ( s < X) {
				val[i] = X - s;
				left -= m;
			}
			else {
				r = (X - 1)/a[i] + 1;
				r = min(r, m);
				s = r * a[i];
				val[i] = 0;
				left = left - r;
			}
		}
	}
	for (i = 1; i <=n; i ++) {
		if ( val[i] <= 0) continue;
		r = ((val[i]) - 1)/b[i] + 1;
		if ( left >= r) left -= r;
		else return false;
	}
	if ( left >= 0) return true;
	return false;
}
int main() {
	ll r, x, y, i, lo, hi, mid, j, ans, t;
	cin >> n >> m;
	
	
	for (i = 1; i <= n; i ++) cin >> a[i];
	for (i = 1; i <= n; i ++) cin >> b[i];
	lo = 0;
	hi = 2e18 + 1;
	
	while ( lo < hi) {
		mid = (lo + hi)/2;
		if ( Solve(mid)) lo = mid + 1;
		else hi = mid;
	}
	cout << lo - 1 <<endl;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |