#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define double long double
const int M = 1000000007;
const int N = 3e5+9;
const int INF = 2e9+1;
const int MAXN = 100000;
const int LINF = 2000000000000000001;
//_ ***************************** START Below *******************************
vector<int> a;
//* O(n*n*10)
void bruteforce(int n, int k){
int ans = 0;
for(int i=0; i<n; i++){
vector<int> mp(10, 0);
for(int j=i; j<n; j++){
mp[a[j]]++;
bool isAllK = true;
for(int l=0; l<=9; l++){
if(mp[l] == 0) continue;
if(mp[l] != k){
isAllK = false;
break;
}
}
if(isAllK) ans++;
}
}
cout << ans << endl;
}
//* T.C. : O(10 * n)
void consistency(int n, int k){
int ans = 0;
for(int i=1; i<=10; i++){
int m = i*k;
unordered_map<int,int> mp;
int s=0, e=0;
while(e<n){
mp[a[e]]++;
if(e-s+1 < m){
e++;
}
else{
//* Valid window : where distinct eles == m/2
//* Eg : [1, 1, 3, 2, 3, 2] => mp = 3 == 6/2
if(mp.size()*2 == m) ans++;
mp[a[s]]--;
if(mp[a[s]] == 0) mp.erase(a[s]);
s++;
e++;
}
}
}
cout << ans << endl;
}
void solve() {
int n, k;
cin >> n >> k;
a.resize(n);
for(int i=0; i<n; i++) cin>> a[i];
bruteforce(n, k);
consistency(n, k);
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50ICAgICAgICAgICAgICBsb25nIGxvbmcgaW50CiNkZWZpbmUgZG91YmxlICAgICAgICAgICBsb25nIGRvdWJsZQoKCmNvbnN0IGludCBNID0gMTAwMDAwMDAwNzsKY29uc3QgaW50IE4gPSAzZTUrOTsKY29uc3QgaW50IElORiA9IDJlOSsxOwpjb25zdCBpbnQgTUFYTiA9IDEwMDAwMDsKY29uc3QgaW50IExJTkYgPSAyMDAwMDAwMDAwMDAwMDAwMDAxOwoKLy9fICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFNUQVJUIEJlbG93ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCgoKdmVjdG9yPGludD4gYTsKCi8vKiBPKG4qbioxMCkKCnZvaWQgYnJ1dGVmb3JjZShpbnQgbiwgaW50IGspewoJCglpbnQgYW5zID0gMDsKCWZvcihpbnQgaT0wOyBpPG47IGkrKyl7CgkJdmVjdG9yPGludD4gbXAoMTAsIDApOwoJCWZvcihpbnQgaj1pOyBqPG47IGorKyl7CgkJCW1wW2Fbal1dKys7CgkJCQoJCQlib29sIGlzQWxsSyA9IHRydWU7CgkJCWZvcihpbnQgbD0wOyBsPD05OyBsKyspewoJCQkJaWYobXBbbF0gPT0gMCkgY29udGludWU7CgkJCQlpZihtcFtsXSAhPSBrKXsKCQkJCQlpc0FsbEsgPSBmYWxzZTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQlpZihpc0FsbEspIGFucysrOwoJCX0KCX0KCQoJY291dCA8PCBhbnMgPDwgZW5kbDsKfQogCgoKLy8qIFQuQy4gOiBPKDEwICogbikKCgp2b2lkIGNvbnNpc3RlbmN5KGludCBuLCBpbnQgayl7CglpbnQgYW5zID0gMDsKCWZvcihpbnQgaT0xOyBpPD0xMDsgaSsrKXsKCQlpbnQgbSA9IGkqazsKCQkKCQl1bm9yZGVyZWRfbWFwPGludCxpbnQ+IG1wOwoJCQoJCWludCBzPTAsIGU9MDsKCQl3aGlsZShlPG4pewoJCQltcFthW2VdXSsrOwoJCQlpZihlLXMrMSA8IG0pewoJCQkJZSsrOwkKCQkJfQoJCQllbHNlewoJCQkJCgkJCQkvLyogVmFsaWQgd2luZG93IDogd2hlcmUgZGlzdGluY3QgZWxlcyA9PSBtLzIKCQkJCS8vKiBFZyA6IFsxLCAxLCAzLCAyLCAzLCAyXSA9PiBtcCA9IDMgPT0gNi8yCgkJCQlpZihtcC5zaXplKCkqMiA9PSBtKSBhbnMrKzsKCQkJCQoJCQkJbXBbYVtzXV0tLTsKCQkJCWlmKG1wW2Fbc11dID09IDApIG1wLmVyYXNlKGFbc10pOwoJCQkJcysrOwoJCQkJZSsrOwoJCQl9CgkJfQoJCQoJfQoJCgljb3V0IDw8IGFucyA8PCBlbmRsOwp9CgoKdm9pZCBzb2x2ZSgpIHsKCglpbnQgbiwgazsKCWNpbiA+PiBuID4+IGs7CglhLnJlc2l6ZShuKTsKCWZvcihpbnQgaT0wOyBpPG47IGkrKykgY2luPj4gYVtpXTsKCglicnV0ZWZvcmNlKG4sIGspOwoJY29uc2lzdGVuY3kobiwgayk7CgkKfQoKCgoKCmludDMyX3QgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwoKICAgIGludCB0ID0gMTsKICAgIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIHNvbHZlKCk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=