#include<bits/stdc++.h>
using namespace std;
#define int long long
long long n,m;
int a[200010],b[200010];
bool check(int k){
int ans=0;
for(int i=1;i<=n;i++){
if(a[i]+b[i]<k)return false;
if(a[i]<k)ans+=k-a[i];
if(ans>m)return false;
}
return true;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
cin>>b[i];
}
sort(a+1,a+n+1);
int l=a[1],r=a[n]+m;
while(l<r){
int mid=(l+r+1)>>1;
if(check(mid))l=mid;
else r=mid-1;
}
cout<<l<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
long long m;
int a[200010],b[200010];
bool check(int x){
int s=m;
for(int i=1;i<=n;i++){
if(b[i]>=x-a[i]&&s>=x-a[i]){
s=s-(x-a[i]);
}
else {
return false;
}
}
return true;
}
signed main(){
cin>>n>>m;
int mmin=2e5,mmax=0;
for(int i=1;i<=n;i++){
cin>>a[i];
mmin=min(mmin,a[i]);
}
for(int i=1;i<=n;i++){
cin>>b[i];
}
long long l=mmin,r=m+mmax;
while(l<r){
long long mid=(l+r+1)>>1;
if(check(mid))l=mid;
else r=mid-1;
}
cout<<l<<endl;
return 0;
}