#include using namespace std; #ifdef LOCAL #include "debug.h" #else #define debug(...) 42 #endif vector manacher(string s) { string t(s.size() * 2 + 1, '#'); for (int i = 0; i < s.size(); i++) { t[2 * i + 1] = s[i]; } int n = t.size(); vector rad(n, 1); int j = 0; for (int i = 1; i < n; i++) { if (j + rad[j] > i) { rad[i] = min(rad[2 * j - i], j + rad[j] - i); } while (0 <= i - rad[i] && i + rad[i] < n && t[i - rad[i]] == t[i + rad[i]]) rad[i]++; if (j + rad[j] < i + rad[i]) j = i; } return rad; } void solve() { int n, m; string s; cin >> n >> m >> s; vector d = manacher(s + s); for (int i = 0; i < 2 * n; i++) { d[i] = max(d[i], d[i + 2 * n]) - 1; } debug(s + s); d.resize(2 * n); debug(d); int ans = INT_MAX; for (int i = 0; i < 2 * n; i++) { if (d[i] >= m || d[i] >= n) { int r = (m + 1 + (i & 1)) / 2; // ε›žζ–‡εŠεΎ„ int l_need = max(0, r - (i + 1) / 2); int r_need = max(0, r - (n - i / 2)); debug(i, d[i], l_need, r_need); ans = min(ans, (l_need + n - 1) / n + (r_need + n - 1) / n + 1); } } if (ans == INT_MAX) ans = -1; cout << ans << '\n'; } int main() { ios::sync_with_stdio(0); cin.tie(0); int T; cin >> T; while (T--) { solve(); } }