import sys input = lambda :sys.stdin.readline()[:-1] ni = lambda :int(input()) na = lambda :list(map(int,input().split())) yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES") no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO") ####################################################################### def manacher(s): s = s.replace('', '#') n = len(s) p = [1 for _ in range(n)] c = 0 for i in range(1, n): if i < c + p[c]: p[i] = min(p[c - (i - c)], c + p[c] - i) while i - p[i] >= 0 and i + p[i] < n and s[i - p[i]] == s[i + p[i]]: p[i] += 1 if i + p[i] > c + p[c]: c = i return p def max_palindrome(s): P = manacher(s) return max(P) - 1 def solve(n, m, s): A = max_palindrome(s) B = max_palindrome(s + s) C = max_palindrome(s + s + s) if A >= m: return 1 elif B >= m: return 2 elif C >= m: return 3 elif B == C and B < m: return -1 else: return 3 + (m - B - 1) // (C - B) def greedy(n, m, s): z = "" for t in range(1000): if max_palindrome(z) >= m: return t z += s return -1 for _ in range(ni()): n, m = na() s = input() print(solve(n, m, s)) #print(greedy(n, m, s)) # from random import randint # for _ in range(10000): # n = randint(1, 10) # m = randint(1, n * 10) # s = "".join([chr(randint(97, 122)) for _ in range(n)]) # if solve(n, m, s) != greedy(n, m, s): # print(n, m) # print(s) # print(solve(n, m, s)) # print(greedy(n, m, s)) # break # #print(_) # n, m = na() # s = input() # print(solve(n, m, s)) # z = s # for i in range(4): # print(*manacher(z)) # z += s