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.
#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ul;
#define len (int)1e5+5
#define mod (ll)(1e9+7)
#define pq(a) priority_queue< a >
#define pqd(b) priority_queue< b , vector< b > , greater< b >>
#define MP make_pair
#define v(i) vector<i>
#define p(aa,bb) pair< aa,bb>
#define pb push_back
#define pp pop_back
#define clr(a) memset((a),0,sizeof((a)))
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repd(i,a,b) for(ll i=(a);i>=(b);i--)
#define all(a) (a).begin(),(a).end()
#define F first
#define S second
#define ln length()
#define INF (1LL<<61)
#define co cout<<
#define ci cin>>
#define sc(a,b) scanf("%(a)",&(b))
#define nl "\n"

#define fio(a,b) freopen(" a ","r",stdin); freopen(" b","w",stdout);
#define ios ios::sync_with_stdio(0); cin.tie(0);

ul modpow(ul x,ul n,ul m){
    if(n==0) return 1UL%m;
    ul u=modpow(x,n/2,m);
    u = (u*u)%m;
    if(n%2==1) u = (u*x)%m;
    return u;
}
bool prm[len];
v(int) prm_no;
void make_prm(){
    prm[0]=prm[1]=true;
    for(int first=2;first<=len;first++){
        if(!prm[first]){
            prm_no.pb(first);
            for(int second=2*first;second<=len;second+=first)prm[second]=true;
        }
    }
}
v(int) factor;
void make_factor(int n)
{
    for(int i=1;i*i<=n;i++){
        if(n%i==0){
            factor.pb(i);factor.pb(n/i);
            if(i*i==n)factor.pp();
        }
    }
}
ul pascal_tri[2][(int)105];
void make_pascalTri(int n){
    bool f=0;clr(pascal_tri);
    for(int i=0;i<=n;i++){
        pascal_tri[f][0]=1;
        for(int j=1;j<=i;j++){
            pascal_tri[f][j]=pascal_tri[!f][j]+pascal_tri[!f][j-1];
        }
        f=!f;
    }
}
int prm_div[len];
void make_prm_div(){
    for(auto u:prm_no){
        for(int i=u;i<=len;i+=u)prm_div[i]++;
    }
}

ll gcd(ll a, ll b)
{
    if (b == 0)
        return a;
    return gcd(b, a % b);
}
ll give_floor(ll n,ll a)
{
    if(n%a==0)return n/a;
    else{
        return n/a+1;
    }
}
bool is_perfect(ll n)
{
    ll i;
    for(i=1;i*i<n;i++);
    return i*i==n;
}

int n,k;
void solve(){
    ci n>>k;
    string s;ci s;
    int cnt=0;
    for(int i=1;i<=(n-i);i++){
        if(s[i-1]==s[n-i])cnt++;
        else break;
    }
    if(cnt>=k and n>=2*k+1)co "YES\n";
    else co "NO\n";
}

signed main(){
    //ios
    int t;//=1;
    ci t;
    while(t--){
        solve();
    }
}
