#include<bits/stdc++.h> usingnamespace std; #define ll long long constint maxn = 1e6 + 10; constint INF = 0x3f3f3f3f; int t, n, m; int a[maxn], pl[maxn], pr[maxn]; map<int, int>mpl, mpr; bool ok[maxn]; intmain(){ scanf("%d", &t); while (t--) { mpl.clear(); mpr.clear(); memset(ok, 0, sizeof(ok)); scanf("%d%d", &n, &m); for (int i = 0; i < m; i++) { scanf("%d", &a[i]); } for (int i = 0; i < m; i++) { if (!mpl.count(a[i])) { mpl[a[i]] = i; pl[i] = -1; } else { pl[i] = mpl[a[i]]; mpl[a[i]] = i; } } for (int i = m - 1; i >= 0; i--) { if (!mpr.count(a[i])) { mpr[a[i]] = i; pr[i] = INF; } else { pr[i] = mpr[a[i]]; mpr[a[i]] = i; } } int R = m - 1, L = m - 1; while (L >= 0 && R >= 0) { while (R - L + 1 > n)R--; if (R == m - 1) { if (pr[L] > R) { ok[L] = 1; if (R - L + 1 == n)R--; else L--; } else R = pr[L] - 1; } else { while (R - L + 1 < n&&L >= 0) { L--; if (pr[L] <= R) { R = pr[L] - 1; } } if (L >= 0)ok[L] = 1; R--; } } int ans = 0; R = 0; while (R < min(n, m)) { if (pl[R] >= 0)break; bool flg = 1; for (int i = R + 1; i < m; i += n) { if (!ok[i]) { flg = 0; break; } } if (flg)ans++; R++; } if (m < n&&R == m)ans = n; cout << ans << endl; } return0; }