#include <bits/stdc++.h>
#define ll long long
#define ff first
#define ss second
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define ertunt return
using namespace std;
ll mod = 998244353;
vector<ll> adj[600007];
vector<ll> f(600005), inv(600005);
ll modpow(ll a, ll b){
ll r = 1;
while(b){
if(b & 1){
r *= a;
r %= mod;
}
a *= a;
a %= mod;
b >>= 1;
}
ertunt r;
}
ll nCk(ll n, ll k){
if(k < 0 || k > n) ertunt 0;
ertunt f[n] * inv[k] % mod * inv[n - k] % mod;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
ll n;
cin >> n;
vector<ll>a(n),b(n);
for(auto &x : a)cin >> x;
for(auto &x : b)cin >> x;
vector<ll>pre(n+1);
pre[0] = a[0];
ll cur = a[0]+b[0];
for(ll i = 1; i < n; i++){
pre[i] = pre[i-1];
pre[i] += max(0ll,a[i]-cur);
cur += b[i] + max(0ll,a[i]-cur);
}
vector<ll>suf(n+2),val(n+2);
suf[n-1] = a[n-1];
cur = b[n-1];
val[n-1] = cur;
for(ll i = n-2; i >= 0; i--){
suf[i] = max(a[i],suf[i+1]-b[i]);
val[i] = val[i+1] + b[i];
}
ll l = 0,r = 1e18;
while(l < r){
ll m = (l+r)>>1;
ll p = -1;
for(ll i = 0; i < n; i++){
if(suf[i] <= m){
p = i;
break;
}
}
if(p == -1){
l = m+1;
continue;
}
if(p == 0){
r = m;
continue;
}
if(val[p] + m >= pre[p-1]) r = m;
else l = m+1;
}
cout << l;
}