#pragma GCC optimize("O3,inline")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;
using ll = long long;
#define int ll
using ii = pair<int, int>;
using iii = pair<ii, int>;
constexpr int INF = 1e18 + 5;
constexpr int MAXN = 300'000 + 5;
constexpr int MOD = 1e9 + 7;
signed main() {
ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
int N; cin >> N;
vector<int> X(N); for (int i = 0; i < N; ++i) cin >> X[i];
vector<int> Y(N); for (int i = 0; i < N; ++i) cin >> Y[i];
int Xsum = 0; for (int i = 0; i < N; ++i) Xsum += X[i];
int Ysum = 0; for (int i = 0; i < N; ++i) Ysum += Y[i];
/*
for (int d = 1; d < N; ++d) {
for (int i = N-1; i >= d; --i) {
int ptr1 = i-d;
int sub = min(Y[i], X[ptr1]);
Y[i] -= sub;
X[ptr1] -= sub;
delta += sub;
}
}
*/
// BSTA for removing the most stuff from the start of X that gives the same delta
auto opt = [&](vector<int> X, vector<int> Y) {
int delta = 0;
int ptr1 = 1;
for (int i = 0; i < N-1; ++i) {
ptr1 = max(ptr1, i + 1);
while (ptr1 < N) {
if (Y[ptr1] <= X[i]) {
X[i] -= Y[ptr1];
delta += Y[ptr1];
Y[ptr1] = 0;
ptr1++;
}
else {
Y[ptr1] -= X[i];
delta += X[i];
X[i] = 0;
break;
}
}
}
return delta;
};
int correct = opt(X, Y);
int lo = 0; int hi = Xsum - Ysum; int ans = 0;
while (lo <= hi) {
int mid = (lo + hi) / 2;
vector<int> Xcpy = X;
int att = mid;
for (int i = 0; i < N; ++i) {
int sub = min(att, Xcpy[i]);
Xcpy[i] -= sub;
att -= sub;
}
int hmm = opt(Xcpy, Y);
if (hmm == correct) {
ans = mid;
lo = mid + 1;
}
else hi = mid - 1;
}
vector<int> bonuses(N);
int att = ans;
for (int i = 0; i < N; ++i) {
int sub = min(att, X[i]);
X[i] -= sub;
att -= sub;
bonuses[i] += sub;
}
int delta = 0;
int ptr1 = 1;
for (int i = 0; i < N-1; ++i) {
ptr1 = max(ptr1, i + 1);
while (ptr1 < N) {
if (Y[ptr1] <= X[i]) {
X[i] -= Y[ptr1];
delta += Y[ptr1];
Y[ptr1] = 0;
ptr1++;
}
else {
Y[ptr1] -= X[i];
delta += X[i];
X[i] = 0;
break;
}
}
}
for (int i = 0; i < N; ++i) X[i] += bonuses[i];
for (int i = 0; i < N; ++i) {
int sub = min(X[i], Y[i]);
X[i] -= sub;
Y[i] -= sub;
}
for (int i = 0; i < N; ++i) delta -= Y[i];
cout << delta;
}