/*
 * Comisia - Algoritmiada 2016 Runda 3 Seniori
 * @Alex Tatomir
 */

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <cmath>
 
using namespace std;
 
#define mp make_pair
#define pb push_back
#define ll long long
 
#define maxN 200011
#define maxLog 19
#define inf 1000000000000000000LL
 
int n, i, j, l, r;
ll sums[maxN];
int rmq[maxLog][maxN];
int help[maxN];
ll ans = inf;
 
int query(int l, int r) {
    int dim = (r - l + 1);
    int id = help[dim];
 
    return max(rmq[id][l], rmq[id][r - (1 << id) + 1]);
}
 
int main()
{
    freopen("comisia.in","r",stdin);
    freopen("comisia.out","w",stdout);
 
    scanf("%d", &n);
    for (i = 1; i <= n; i++) scanf("%d", &rmq[0][i]);
    for (i = 1; i <= n; i++) scanf("%lld", &sums[i]), sums[i] += sums[i - 1];
 
 
    help[1] = 0;
    for (i = 1; i <= n; i++) {
        help[i] = help[i - 1];
        if (i >= (1 << help[i]) << 1) help[i]++;
    }
 
    for (i = 1; i <= help[n]; i++) {
        int big_dim = (1 << i);
        int small_dim = big_dim >> 1;
 
        for (j = 1; j + big_dim - 1 <= n; j++)
            rmq[i][j] = max(rmq[i - 1][j], rmq[i - 1][j + small_dim]);
    }
 
    for (l = 1; l <= n; l++) {
        r = l;
 
        while (r <= n) {
            int need = query(l, r);
            if (need <= r - l + 1) break;
            r = l + need - 1;
        }
 
        if (r <= n) ans = min(ans, sums[r] - sums[l - 1]);
    }
 
    printf("%lld", ans);
 
    return 0;
}