#include <iostream>
#include <vector>
#include <cmath>
#include <numeric>
#include <algorithm>
#include <set>
#include <unordered_set>
#include <cstring>
#include <unordered_map>
#include <iomanip>
#include <queue>
#include <map>
#include <sstream>
#include <stack>
#include <bitset>
#include <random>
using ll = long long;
using namespace std;
constexpr int nm = 500002;
int n, m;
ll a[nm], c[nm], sum[nm];
int f[nm];
void add(vector<int> &tree, int i, int x) {
while (i <= m) {
tree[i] = max(tree[i], x);
i += i & (-i);
}
}
int query(vector<int> &tree, int i) {
int res = -1e9;
while (i > 0) {
res = max(res, tree[i]);
i -= i & (-i);
}
return res;
}
void solve() {
cin >> n;
vector<ll> vals{0};
for (int i = 1; i <= n; ++i) {
cin >> a[i];
sum[i] = sum[i - 1] + a[i];
vals.push_back(sum[i]);
}
for (int i = 1; i <= n; ++i) {
cin >> c[i];
vals.push_back(sum[i] - c[i]);
}
if (n == 1) {
cout << "0\n";
return;
}
sort(vals.begin(), vals.end());
map<ll, int> id;
m = 0;
for (int i = 0; i < vals.size(); ++i) {
if (i == 0 || vals[i] > vals[i - 1]) {
id[vals[i]] = ++m;
}
}
vector<int> tree(m + 1, -1e9);
// sum[j] - sum[i - 1] >= c[j]
// sum[i - 1] <= sum[j] - c[j]
f[1] = 0;
add(tree, id[0], 0);
for (int i = 2; i <= n; ++i) {
f[i] = query(tree, id[sum[i] - c[i]]) + 1;
add(tree, id[sum[i - 1]], f[i]);
}
cout << (f[n] > 0 ? f[n] : -1) << "\n";
}
int main() {
#ifdef LOCAL
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif
ios::sync_with_stdio(0);
cin.tie(0);
int t;
cin >> t;
// t = 1;
while (t--) solve();
}