#include <bits/stdc++.h>
#define multi true
#define int long long
#define debug(x) cerr << #x << '=' << x << '\n';
using namespace std;
int t = 1, n, d, ans;
vector <int> a, vis, Ans;
int pre(int x) { return (x - d + n) % n; }
void solve() {
ans = 0;
cin >> n >> d;
a.clear(), vis.clear(), Ans.clear();
a.resize(n), Ans.resize(n, 0), vis.resize(n, 0);
for (int &i : a) cin >> i;
queue <int> Q;
for (int i = 0; i < n; i++)
if (a[i] == 0)
Q.push(i), vis[i] = 1;
while (Q.size()) {
int t = Q.front();
Q.pop();
if (vis[pre(t)] == 0)
vis[pre(t)] = 1, Q.push(pre(t)), Ans[pre(t)] = Ans[t] + 1, ans = max(ans, Ans[pre(t)]);
}
for (int i : vis) if (i == 0) {
cout << -1 << '\n';
return;
}
cout << ans << '\n';
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
freopen("err.txt", "w", stderr);
#endif
if (multi) cin >> t;
while (t--)
solve();
return 0;
}
#include <bits/stdc++.h>
#define multi true
#define int long long
#define debug(x) cerr << #x << '=' << x << '\n';
using namespace std;
int t = 1, n, d, ans;
vector <int> a, vis, Ans;
int pre(int x) { return (x - d + n) % n; }
void solve() {
ans = 0;
cin >> n >> d;a.resize(n), Ans.resize(n, 0), vis.resize(n, 0);
for (int &i : a) cin >> i;
queue <int> Q;
for (int i = 0; i < n; i++)
if (a[i] == 0)
Q.push(i), vis[i] = 1;
while (Q.size()) {
int t = Q.front();
Q.pop();
if (vis[pre(t)] == 0)
vis[pre(t)] = 1, Q.push(pre(t)), Ans[pre(t)] = Ans[t] + 1, ans = max(ans, Ans[pre(t)]);
}
for (int i : vis) if (i == 0) {
cout << -1 << '\n';
return;
}
cout << ans << '\n';
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
freopen("err.txt", "w", stderr);
#endif
if (multi) cin >> t;
while (t--)
solve();
return 0;
}
resize 怎么用捏?求巨佬指点。