#include<iostream>
#include<cstring>
#include<algorithm>
typedef long long LL;
using namespace std;
const int N = 2e5+5;
int n;
LL m;
int a[N], b[N];
bool check(int x){
LL sum=0;
for(int i=0;i<n;i++){
int gap = x-a[i];
if(gap>b[i]) return false;
sum+=max(x-a[i],0);
}
return (sum<=m)?true:false;
}
int main(){
cin>>n>>m;
int l = 0x3f3f3f3f, r = 0;
for(int i=0;i<n;i++) {
scanf("%d", &a[i]);
l = min(l,a[i]);
}
for(int i=0;i<n;i++) {
scanf("%d", &b[i]);
r = max(r,b[i]+a[i]);
}
while(l<r){
int mid = l+r>>1;
if(check(mid)) l = mid;
else r = mid-1;
}
cout<<r;
return 0;
}