#include <bits/stdc++.h>
using namespace std;
// 判断:长度为 n 的二进制串 s,是否能在恰好 k 次单点翻转后变成回文
bool can(const string& s, int k) {
    int n = (int)s.size();
    int mism = 0;                         // 两端不相等的“对数”
    for (int i = 0; i < n / 2; ++i) {
        if (s[i] != s[n - 1 - i]) ++mism;
    }
    if (k < mism) return false;           // 不够修复所有不相等的对
    if (n % 2 == 1) return true;          // 有中间位,剩余随便花
    return ((k - mism) % 2 == 0);         // 偶长度:剩余必须是偶数
}
int main() {
    int T;
    cin >> T;
    while (T--) {
        int n, k;
        string s;
        cin >> n >> k >> s;               // 读入 n, k, s
        cout << (can(s, k) ? "YES" : "NO") << '\n';
    }
    return 0;
}
// 64 位输出请用 printf("%lld")