Kawashiro Nitori is a girl who loves competitive programming.

One day she found a string and an integer. As an advanced problem setter, she quickly thought of a problem.

Given a string s and a parameter k, you need to check if there exist k+1 non-empty strings a_1,a_2...,a_{k+1}, such that $$$s=a_1+a_2+… +a_k+a_{k+1}+R(a_k)+R(a_{k-1})+…+R(a_{1}).$$$ 

Here + represents concatenation. We define R(x) as a reversed string x. For example R(abcd) = dcba. Note that in the formula above the part R(a_{k+1}) is intentionally skipped.

Input

The input consists of multiple test cases. The first line contains a single integer t (1≤ t≤ 100) — the number of test cases. The description of the test cases follows.

The first line of each test case description contains two integers n, k (1≤ n≤ 100, 0≤ k≤ ⌊ n/2 ⌋) — the length of the string s and the parameter k.

The second line of each test case description contains a single string s of length n, consisting of lowercase English letters.

Output

For each test case, print "YES" (without quotes), if it is possible to find a_1,a_2,…,a_{k+1}, and "NO" (without quotes) otherwise.

You can print letters in any case (upper or lower).

Example

Input


7
5 1
qwqwq
2 1
ab
3 1
ioi
4 2
icpc
22 0
dokidokiliteratureclub
19 8
imteamshanghaialice
6 3
aaaaaa


Output


YES
NO
YES
NO
YES
NO
NO

Note

In the first test case, one possible solution is a_1=qw and a_2=q.

In the third test case, one possible solution is a_1=i and a_2=o.

In the fifth test case, one possible solution is a_1=dokidokiliteratureclub.
/********   All Required Header Files ********/
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
#include <queue>
#include <deque>
#include <bitset>
#include <iterator>
#include <list>
#include <stack>
#include <map>
#include <set>
#include <functional>
#include <numeric>
#include <utility>
#include <limits>
#include <time.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>

using namespace std;

/*******  All Required define Pre-Processors and typedef Constants *******/
typedef long long int ll;
typedef long double ld;
typedef string str;

typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<double,double> pdd;

typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<double> vd;
typedef vector<str> vs; 

typedef vector<vector<int>> vvi;
typedef vector<vector<ll>> vvl;
typedef vector<vector<double>> vvd;

#define FOR(i, j, k, in) for (int i=j; i<k; i+=in)
#define RFOR(i, j, k, in) for (int i=j; i>=k; i-=in)
#define f0r(i, j) FOR(i, 0, j, 1)
#define rf0r(i, j) FOR(i, j, 0, 1)

#define ln "\n"
#define println(x) cout<<x<<ln
#define print(x) cout<<x
#define dbg(x) cout<<#x<<" = "<<x<<ln

#define mp make_pair
#define pf push_front
#define pb push_back
#define fi first
#define se second

#define all(x) x.begin(), x.end()
#define rall(x) x.end(), x.begin()
#define getunique(v) {sort(all(v)); v.erase(unique(all(v)), v.end());}


/********** solve()  function **********/
void solve()
{
    int n, k;
    cin >> n >> k;
    string s;
    cin >> s;

    ll k1 = k*2+1; 
    int counter = 0;

    int pt1 = 0, pt2 = n-1;
    while ((pt1 <= pt2)) {
        if (s.at(pt1) != s.at(pt2)) {
            counter++;
            break;
        }
        if (pt1 == pt2) counter += 1;
        else counter += 2;
        pt1++;
        pt2--;
    }
    if (k1 == 1) cout << "YES";
    else if (counter >= k1) cout << "YES";
    else cout << "NO";
    cout << endl;
}

/********** Main()  function **********/
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    ll t;
    cin >> t;
    for (int it=1;it<=t;it++) {
        solve();
    }
    return 0;
}


