#include <cstdio>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
const int Hash = 10007;
int n, m, g[4], f[222];
char P[1000005], Q[105];
vector <string> h[Hash];
int main() {
int T;
f['A'] = 0; f['C'] = 1; f['G'] = 2; f['T'] = 3;
for (scanf("%d", &T); T--;) {
scanf("%d%d\n", &n, &m);
gets(P); gets(Q);
for (int i = 0; i < 4; i++) {
g[i] = i;
for (int j = 0; j < m - 1; j++) g[i] = (g[i] * 4) % Hash;
}
vector <string> v;
for (int i = 0; i <= m; i++) {
for (int j = i; j <= m; j++) {
string a, b, c, s;
a = b = c = "";
for (int k = 0; k < m; k++) {
if (k < i) a += Q[k];
else if (k < j) b += Q[k];
else c += Q[k];
}
reverse(b.begin(), b.end());
s = a + b + c;
v.push_back(s);
}
}
sort(v.begin(), v.end());
int vn = v.size(), Sn;
vector <string> S;
string now = "";
for (int i = 0; i < vn; i++) {
if (now != v[i]) {
now = v[i];
S.push_back(now);
}
}
Sn = S.size();
int val = 0, cur;
for (int i = 0; i < Sn; i++) {
val = 0;
for (int j = 0; j < m; j++) {
cur = f[S[i][j]];
val = (val * 4 + cur) % Hash;
}
h[val].push_back(S[i]);
}
val = 0;
for (int i = 0; i < m; i++) {
cur = f[P[i]];
val = (val * 4 + cur) % Hash;
}
int res = 0, k;
for (int i = m - 1; i < n; i++) {
if (h[val].size() >= 1) {
for (int j = 0; j < h[val].size(); j++) {
for (k = 0; k < m; k++) if (P[i - m + 1 + k] != h[val][j][k]) break;
if (k == m) {
res++;
break;
}
}
}
if (i < n - 1) {
val = (val - g[f[P[i - m + 1]]] + Hash);
val = (val * 4 + f[P[i + 1]]) % Hash;
}
}
printf("%d\n", res);
for (int i = 0; i < Hash; i++) h[i].clear();
}
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IEhhc2ggPSAxMDAwNzsKaW50IG4sIG0sIGdbNF0sIGZbMjIyXTsKY2hhciBQWzEwMDAwMDVdLCBRWzEwNV07CnZlY3RvciA8c3RyaW5nPiBoW0hhc2hdOwppbnQgbWFpbigpIHsKCWludCBUOwoJZlsnQSddID0gMDsgZlsnQyddID0gMTsgZlsnRyddID0gMjsgZlsnVCddID0gMzsKCWZvciAoc2NhbmYoIiVkIiwgJlQpOyBULS07KSB7CgkJc2NhbmYoIiVkJWRcbiIsICZuLCAmbSk7CgkJZ2V0cyhQKTsgZ2V0cyhRKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewoJCQlnW2ldID0gaTsKCQkJZm9yIChpbnQgaiA9IDA7IGogPCBtIC0gMTsgaisrKSBnW2ldID0gKGdbaV0gKiA0KSAlIEhhc2g7CgkJfQoJCXZlY3RvciA8c3RyaW5nPiB2OwoJCWZvciAoaW50IGkgPSAwOyBpIDw9IG07IGkrKykgewoJCQlmb3IgKGludCBqID0gaTsgaiA8PSBtOyBqKyspIHsKCQkJCXN0cmluZyBhLCBiLCBjLCBzOwoJCQkJYSA9IGIgPSBjID0gIiI7CgkJCQlmb3IgKGludCBrID0gMDsgayA8IG07IGsrKykgewoJCQkJCWlmIChrIDwgaSkgYSArPSBRW2tdOwoJCQkJCWVsc2UgaWYgKGsgPCBqKSBiICs9IFFba107CgkJCQkJZWxzZSBjICs9IFFba107CgkJCQl9CgkJCQlyZXZlcnNlKGIuYmVnaW4oKSwgYi5lbmQoKSk7CgkJCQlzID0gYSArIGIgKyBjOwoJCQkJdi5wdXNoX2JhY2socyk7CgkJCX0KCQl9CgkJc29ydCh2LmJlZ2luKCksIHYuZW5kKCkpOwoJCWludCB2biA9IHYuc2l6ZSgpLCBTbjsKCQl2ZWN0b3IgPHN0cmluZz4gUzsKCQlzdHJpbmcgbm93ID0gIiI7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCB2bjsgaSsrKSB7CgkJCWlmIChub3cgIT0gdltpXSkgewoJCQkJbm93ID0gdltpXTsKCQkJCVMucHVzaF9iYWNrKG5vdyk7CgkJCX0KCQl9CgkJU24gPSBTLnNpemUoKTsKCQlpbnQgdmFsID0gMCwgY3VyOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgU247IGkrKykgewoJCQl2YWwgPSAwOwoJCQlmb3IgKGludCBqID0gMDsgaiA8IG07IGorKykgewoJCQkJY3VyID0gZltTW2ldW2pdXTsKCQkJCXZhbCA9ICh2YWwgKiA0ICsgY3VyKSAlIEhhc2g7CgkJCX0KCQkJaFt2YWxdLnB1c2hfYmFjayhTW2ldKTsKCQl9CgkJdmFsID0gMDsKCQlmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewoJCQljdXIgPSBmW1BbaV1dOwoJCQl2YWwgPSAodmFsICogNCArIGN1cikgJSBIYXNoOwoJCX0KCQlpbnQgcmVzID0gMCwgazsKCQlmb3IgKGludCBpID0gbSAtIDE7IGkgPCBuOyBpKyspIHsKCQkJaWYgKGhbdmFsXS5zaXplKCkgPj0gMSkgewoJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBoW3ZhbF0uc2l6ZSgpOyBqKyspIHsKCQkJCQlmb3IgKGsgPSAwOyBrIDwgbTsgaysrKSBpZiAoUFtpIC0gbSArIDEgKyBrXSAhPSBoW3ZhbF1bal1ba10pIGJyZWFrOwoJCQkJCWlmIChrID09IG0pIHsKCQkJCQkJcmVzKys7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQlpZiAoaSA8IG4gLSAxKSB7CgkJCQl2YWwgPSAodmFsIC0gZ1tmW1BbaSAtIG0gKyAxXV1dICsgSGFzaCk7CgkJCQl2YWwgPSAodmFsICogNCArIGZbUFtpICsgMV1dKSAlIEhhc2g7CgkJCX0KCQl9CgkJcHJpbnRmKCIlZFxuIiwgcmVzKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IEhhc2g7IGkrKykgaFtpXS5jbGVhcigpOwoJfQp9