#include <bits/stdc++.h>
using namespace std;
template <class T> struct SegmentTreeIterative {
int n = 1;
vector<T> st;
SegmentTreeIterative() {}
SegmentTreeIterative(int n) { Initial(n); }
SegmentTreeIterative(vector<int>& a) {
Initial((int)a.size() - 1);
Build(a);
}
void Initial(int _n) {
n = _n;
int tree_size = 1;
while (tree_size <= n) tree_size *= 2;
st.resize(tree_size * 2);
}
T neutral = 0;
T Merge(T& a, T& b) {
return max(a, b);
}
void Build(vector<int>& a) {
for (int i = 1; i <= n; ++i) {
st[n + i] = a[i];
}
for (int u = n - 1; u > 0; --u) {
st[u] = Merge(st[u << 1], st[u << 1 | 1]);
}
}
void Update(int idx, T val) {
st[idx += n] = val;
for (idx /= 2; idx; idx /= 2) {
st[idx] = Merge(st[idx << 1], st[idx << 1 | 1]);
}
}
T Query(int l, int r) {
T res = neutral;
for (l += n, r += n + 1; l < r; l >>= 1, r >>= 1) {
if (l & 1) res = Merge(res, st[l++]);
if (r & 1) res = Merge(res, st[--r]);
}
return res;
}
};
void solve() {
int n;
cin >> n;
vector<int> a(n + 1);
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
vector<int> b(n + 1);
for (int i = 1; i <= n; i++) {
cin >> b[i];
}
SegmentTreeIterative<int64_t> sg(n + 9);
vector<int64_t> mx(n + 1);
int64_t gMx = 0;
for (int i = n; i > 0; i--) {
mx[i] = sg.Query(a[i] + 1, n + 1) + b[i];
if (sg.Query(a[i], a[i]) < mx[i]) {
sg.Update(a[i], mx[i]);
}
gMx = max(gMx, mx[i]);
}
int i = n;
while (i > 0 && gMx != mx[i]) i--;
cout << n - i + 1 << '\n';
}
int main() {
ios_base::sync_with_stdio(0), cin.tie(0);
int t = 1;
cin >> t;
for (int i = 1; i <= t; i++) {
solve();
}
return 0;
}