#include <bits/stdc++.h>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
vector<long long> a(n + 1);
for (int i = 1; i <= n; ++i) cin >> a[i];
// 记录每个值的首末位置
unordered_map<long long, pair<int, int>> pos;
pos.reserve(n * 2);
for (int i = 1; i <= n; ++i) {
auto& pr = pos[a[i]];
if (pr.first == 0) pr.first = i; // 首次出现
pr.second = i; // 不断更新为最后出现
}
// 收集区间 [first(v), last(v)]
vector<pair<int, int>> segs;
segs.reserve(pos.size());
for (auto& kv : pos) segs.push_back(kv.second);
// 按左端点排序
sort(segs.begin(), segs.end());
// 贪心覆盖 [1..n]
int ans = 0, i = 0, R = 0;
while (R < n) {
int best = R;
while (i < (int)segs.size() && segs[i].first <= R + 1) {
best = max(best, segs[i].second);
++i;
}
// 一定能推进:因为位置 R+1 属于某个值 v,其区间必以 L<=R+1 覆盖它
++ans;
R = best;
}
cout << ans << '\n';
}
return 0;
}