#!/usr/bin/env python
import os
import sys
from io import BytesIO, IOBase
import math
from collections import Counter


def func(n, k, array):
    count = 0
    start = False
    i = 0
    stop = False
    while not stop:
        if not start:
            if array[i] == "*":
                # print(i)
                start = True
                look_up = i + k
                count += 1
            i += 1

        else:
            # print(look_up, n)
            if look_up >= n:
                # print(i, "pass")
                if "*" in array[i:]:
                    return count + 1
                return count
            end = False
            # print("look up", i, look_up)
            for j in range(look_up, i - 1, -1):
                if array[j] == "*":
                    count += 1
                    # print(count, i, j)
                    i = j + 1
                    look_up = j + k
                    end = True
                    break
            if not end:
                return count
        if i >= n:
            break
    return count


def main():
    num_test = int(parse_input())
    result = []
    for _ in range(num_test):
        n, k = [int(i) for i in parse_input().split()]
        array = [i for i in parse_input()]
        result.append(func(n, k, array))
    print("\n".join(map(str, result)))


# region fastio

# BUFSIZE = 8192


# class FastIO(IOBase):
#     newlines = 0

#     def __init__(self, file):
#         self._fd = file.fileno()
#         self.buffer = BytesIO()
#         self.writable = "x" in file.mode or "r" not in file.mode
#         self.write = self.buffer.write if self.writable else None

#     def read(self):
#         while True:
#             b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
#             if not b:
#                 break
#             ptr = self.buffer.tell()
#             self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
#         self.newlines = 0
#         return self.buffer.read()

#     def readline(self):
#         while self.newlines == 0:
#             b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
#             self.newlines = b.count(b"\n") + (not b)
#             ptr = self.buffer.tell()
#             self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
#         self.newlines -= 1
#         return self.buffer.readline()

#     def flush(self):
#         if self.writable:
#             os.write(self._fd, self.buffer.getvalue())
#             self.buffer.truncate(0), self.buffer.seek(0)


# class IOWrapper(IOBase):
#     def __init__(self, file):
#         self.buffer = FastIO(file)
#         self.flush = self.buffer.flush
#         self.writable = self.buffer.writable
#         self.write = lambda s: self.buffer.write(s.encode("ascii"))
#         self.read = lambda: self.buffer.read().decode("ascii")
#         self.readline = lambda: self.buffer.readline().decode("ascii")


# sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
parse_input = lambda: sys.stdin.readline().rstrip("\r\n")

# endregion

if __name__ == "__main__":
    main()

#!/usr/bin/env python
import os
import sys
from io import BytesIO, IOBase
import math
from collections import Counter


def func(n, k, array):
    count = 0
    start = False
    i = 0
    stop = False
    while not stop:
        if not start:
            if array[i] == "*":
                # print(i)
                start = True
                look_up = i + k
                count += 1
            i += 1

        else:
            # print(look_up, n)
            if look_up >= n:
                # print(i, "pass")
                if "*" in array[i:]:
                    return count + 1
                return count
            end = False
            # print("look up", i, look_up)
            for j in range(look_up, i - 1, -1):
                if array[j] == "*":
                    count += 1
                    # print(count, i, j)
                    i = j + 1
                    look_up = j + k
                    end = True
                    break
            if not end:
                return count
        if i >= n:
            break
    return count


def main():
    num_test = int(parse_input())
    result = []
    for _ in range(num_test):
        n, k = [int(i) for i in parse_input().split()]
        array = [i for i in parse_input()]
        result.append(func(n, k, array))
    print("\n".join(map(str, result)))


# region fastio

# BUFSIZE = 8192


# class FastIO(IOBase):
#     newlines = 0

#     def __init__(self, file):
#         self._fd = file.fileno()
#         self.buffer = BytesIO()
#         self.writable = "x" in file.mode or "r" not in file.mode
#         self.write = self.buffer.write if self.writable else None

#     def read(self):
#         while True:
#             b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
#             if not b:
#                 break
#             ptr = self.buffer.tell()
#             self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
#         self.newlines = 0
#         return self.buffer.read()

#     def readline(self):
#         while self.newlines == 0:
#             b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
#             self.newlines = b.count(b"\n") + (not b)
#             ptr = self.buffer.tell()
#             self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
#         self.newlines -= 1
#         return self.buffer.readline()

#     def flush(self):
#         if self.writable:
#             os.write(self._fd, self.buffer.getvalue())
#             self.buffer.truncate(0), self.buffer.seek(0)


# class IOWrapper(IOBase):
#     def __init__(self, file):
#         self.buffer = FastIO(file)
#         self.flush = self.buffer.flush
#         self.writable = self.buffer.writable
#         self.write = lambda s: self.buffer.write(s.encode("ascii"))
#         self.read = lambda: self.buffer.read().decode("ascii")
#         self.readline = lambda: self.buffer.readline().decode("ascii")


# sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
parse_input = lambda: sys.stdin.readline().rstrip("\r\n")

# endregion

if __name__ == "__main__":
    main()

#!/usr/bin/env python # print(i) # print(look_up, n) # print(i, "pass") # print("look up", i, look_up) # print(count, i, j) # region fastio # BUFSIZE = 8192 # class FastIO(IOBase): #     newlines = 0 #     def __init__(self, file): #         self._fd = file.fileno() #         self.buffer = BytesIO() #         self.writable = "x" in file.mode or "r" not in file.mode #         self.write = self.buffer.write if self.writable else None #     def read(self): #         while True: #             b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE)) #             if not b: #                 break #             ptr = self.buffer.tell() #             self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr) #         self.newlines = 0 #         return self.buffer.read() #     def readline(self): #         while self.newlines == 0: #             b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE)) #             self.newlines = b.count(b"\n") + (not b) #             ptr = self.buffer.tell() #             self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr) #         self.newlines -= 1 #         return self.buffer.readline() #     def flush(self): #         if self.writable: #             os.write(self._fd, self.buffer.getvalue()) #             self.buffer.truncate(0), self.buffer.seek(0) # class IOWrapper(IOBase): #     def __init__(self, file): #         self.buffer = FastIO(file) #         self.flush = self.buffer.flush #         self.writable = self.buffer.writable #         self.write = lambda s: self.buffer.write(s.encode("ascii")) #         self.read = lambda: self.buffer.read().decode("ascii") #         self.readline = lambda: self.buffer.readline().decode("ascii") # sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout) # endregion