#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using dt = array<int, 2>;
const int N = 2e5 + 9;
const int LG = 20;
int st[N][LG], a[N], b[N];
ll dp[N];
int combine(int x, int y) {
return max(x, y);
}
void build(int n) {
for (int i = 0; i < n; i++) {
st[i][0] = a[i];
dp[i] = -1;
}
for (int k = 1; k < LG; k++) {
for (int i = 0; i + (1 << k) <= n; i++) {
st[i][k] = combine(st[i][k - 1], st[i + (1 << (k - 1))][k - 1]);
}
}
}
int query(int l, int r) {
int k = 31 - __builtin_clz(r - l + 1);
return combine(st[l][k], st[r - (1 << k) + 1][k]);
}
ll f(int s, int n) {
if (s >= n) return 0ll;
int lo = s, hi = n - 1;
while (lo <= hi) {
int mid = (hi + lo) / 2;
if (query(s, mid) == query(s, s)) {
lo = mid + 1;
} else {
hi = mid - 1;
}
}
return dp[s] = b[s] + f(lo, n);
}
void test() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int i = 0; i < n; i++) {
cin >> b[i];
}
build(n);
int x = 0;
while (x < n) {
int mx = 0, r = x;
while (r < n and a[r] == a[x]) {
mx = max(b[r], mx);
r++;
}
for (int i = x; i < r; i++) {
b[i] = mx;
}
x = r;
}
ll mx = 0, tot = n;
for (int i = 0; i < n; i++) {
if (f(i, n) >= mx) {
mx = max(mx, f(i, n));
tot = n - i;
}
}
cout << tot << "\n";
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T = 1;
cin >> T;
for (int i = 1; i <= T; i++) {
test();
}
return 0;
}