#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
#define debug cout<<"check"<<endl;cout.flush();
#define all(x) (x).begin(),(x).end()
#define endl '\n'
const ll N=200005;
const ll mod=1000000007;
const ll INF=2e18L+5;
ll arr[N];
ll tree[N*4];
void build(ll node,ll l,ll r){
if(l==r){
tree[node]=arr[l];
return;
}
ll left=2*node;
ll right=2*node +1;
ll mid=(l+r)/2;
build(left,l,mid);
build(right,mid+1,r);
tree[node]=max(tree[left],tree[right]);
}
ll query(ll node,ll l,ll r, ll lx,ll rx){
if(l>=lx && r<=rx){
return tree[node];
}
else if(l>rx || r<lx){
return 0;
}
ll left=node*2;
ll right=node*2+1;
ll mid=(l+r)/2;
ll p1=query(left,l,mid,lx,rx);
ll p2=query(right,mid+1,r,lx,rx);
return max(p1,p2);
}
void update(ll node,ll l,ll r,ll i,ll newval){
if(l>=i && r<=i){
tree[node]=newval;
return;
}
else if(l>i || r<i){
return;
}
ll left=node*2;
ll right=node*2+1;
ll mid=(l+r)/2;
update(left,l,mid,i,newval);
update(right,mid+1,r,i,newval);
tree[node]=max(tree[left],tree[right]);
}
void solve(){
ll n;
cin>>n;
for(ll i=1;i<=n+1;i++)arr[i]=0;
for(ll i=1;i<=(n+1)*4;i++)tree[i]=0;
build(1,1,n+1);
vector<ll>v,u;
for(ll i=1;i<=n;i++){
ll a; cin>>a; v.pb(a);
}
for(ll i=1;i<=n;i++){
ll a ; cin>>a; u.pb(a);
}
ll mx=0,mxidx=n;
for(ll i=n-1;i>=0;i--){
ll val=query(1,1,n,v[i]+1,n)+u[i];
// cout<<val<<endl;
if(val>mx){
mx=val; mxidx=i;
}
if(val>arr[v[i]])update(1,1,n,v[i],val);
}
cout<<n-mxidx<<endl;
}
int32_t main(){
ios::sync_with_stdio(false);cin.tie(nullptr);
ll t=1;
cin>>t;
for(ll i=1;i<=t;i++){
solve();
}
return 0;
}