#include<bits/stdc++.h>
#pragma GCC target( "sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
#pragma GCC optimize("Ofast,unroll-loops,fast-math,O3")
using namespace std;
#define int long long
#define y1 cheza
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int N=2e5+1000;
const int M=1e4;
const int mod=1e9+7;
const int INF=1e18;
const int dx[]={1,-1,0,0};
const int dy[]={0,0,-1,1};
const long double eps=1e-6;
int n;
int a[N];
int b[N];
int dp[N];
int dp2[N];
int t[N*4];
int t2[N*4];
void build(int v,int tl,int tr){
    if(tl==tr){
        t[v]=0;
        t2[v]=INF;
        return;
    }
    int mid=(tl+tr)>>1ll;
    build(v*2,tl,mid);
    build(v*2+1,mid+1,tr);
    t[v]=0;
    t2[v]=INF;
}
void upd2(int v,int tl,int tr,int l,int x){
    if(tl==tr){
        t2[v]=x;
        return;
    }
    int mid=(tl+tr)>>1ll;
    if(l<=mid){
        upd2(v*2,tl,mid,l,x);
    }
    else{
        upd2(v*2+1,mid+1,tr,l,x);
    }
    t2[v]=min(t2[v*2],t2[v*2+1]);
}
void upd(int v,int tl,int tr,int l,int x){
    if(tl==tr){
        t[v]=a[tl];
        return;
    }
    int mid=(tl+tr)>>1ll;
    if(l<=mid){
        upd(v*2,tl,mid,l,x);
    }
    else{
        upd(v*2+1,mid+1,tr,l,x);
    }
    t[v]=max(t[v*2],t[v*2+1]);
}
int get(int v,int tl,int tr,int x){
    if(tl==tr){
        return tl;
    }
    int mid=(tl+tr)>>1ll;
    if(t[v*2+1]>x){
        return get(v*2+1,mid+1,tr,x);
    }
    else{
        return get(v*2,tl,mid,x);
    }
}
int get2(int v,int tl,int tr,int l,int r){
    if(tl>r||tr<l)return INF;
    if(l<=tl&&tr<=r){
        return t2[v];
    }
    int mid=(tl+tr)>>1ll;
    return min(get2(v*2,tl,mid,l,r),get2(v*2+1,mid+1,tr,l,r));
}
void test(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int j=1;j<=n;j++){
        cin>>b[j];
    }
    // mem();
    build(1,1,n);
    for(int i=1;i<=n;i++){
        dp[i]=0;
        if(t[1]<a[i]){
            dp[i]=b[i];
            // cout<<0<<' ';
        }
        else{
            int cur=get(1,1,n,a[i]);
            // cout<<cur<<' ';
            dp[i]=get2(1,1,n,cur,i)+b[i];
        }
        upd(1,1,n,i,a[i]);
        upd2(1,1,n,i,dp[i]);
        // cout<<dp[i]<<' ';
    }
    // cout<<'\n';
    reverse(a+1,a+n+1);
    reverse(b+1,b+n+1);
    build(1,1,n);
    for(int i=1;i<=n;i++){
        dp2[i]=0;
        if(t[1]<a[i]){
            dp2[i]=b[i];
            // cout<<0<<' ';
        }
        else{
            int cur=get(1,1,n,a[i]);
            // cout<<cur<<' ';
            dp2[i]=get2(1,1,n,cur,i)+b[i];
        }
        upd(1,1,n,i,a[i]);
        upd2(1,1,n,i,dp2[i]);
        // cout<<dp2[i]<<' ';
    }
    // cout<<'\n';

    reverse(dp2+1,dp2+n+1);
    int ans=min(dp[n],dp2[1]);
    for(int i=0;i<=n;i++){
        ans=min(ans,dp[i]+dp2[i+1]);
    }
    cout<<ans<<'\n';
}


/*
1=1
2=4
4
3=8
5
4=13
6
5=19
6=26
*/

signed main(){
    // cout<<setprecision(12);
    // cout<<fixed;
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    // cout.tie(nullptr);
    long long t2=1;
    //  cin>>t2;
    for(int i=1;i<=t2;i++){
        test();
    }
    
    return 0;

}

