#include<bits/stdc++.h>
#define ll long long
#define int ll
#define endl '\n'
using namespace std;
const int N=2e5+500;
int n, a[N];
int cost[N];
pair<int,int> t[N<<2];
void build(int v=1,int tl=1,int tr=n){
    if(tl==tr){
        t[v]={a[tl],tl};
    }
    else{
        int tm=(tl+tr)>>1;
        build(v<<1,tl,tm);
        build(v<<1|1,tm+1,tr);
        t[v]=max(t[v<<1],t[v<<1|1]);
        //cout<<t[v].first<<" "<<t[v].second<<endl;
    }
}
pair<int,int> getmax(int l,int r,int v=1,int tl=1,int tr=n){
    if(r<tl||l>tr){
        return {-1,-1};
    }
    if(l<=tl&&tr<=r){
        return t[v];
    }
    int tm=(tl+tr)>>1;
    return max(getmax(l,r,v<<1,tl,tm),getmax(l,r,v<<1|1,tm+1,tr));
}
int get(int l,int r){
    if(r<l){
        return 0;
    }
    if(l==r){
        return cost[l];
    }
    int pos=getmax(l,r).second;
    if(pos==l or pos==r){
        return cost[pos];
    }
    return cost[pos]+min(get(l,pos-1),get(pos+1,r));
}
void solve(){
    cin>>n;
    for(int z=1;z<=n;z++){
        cin>>a[z];
    }
    for(int z=1;z<=n;z++){
        cin>>cost[z];
    }
    build(1,1,n);
    cout<<get(1,n);
}
main(){
    int t=1;
    //cin>>t;
    while(t--){
        solve();
    }
}
