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 <iostream>
#include <vector>
#include <list>
#include <cmath>
#include <set>
#include <algorithm>
 
using namespace std;

typedef long long ll;

typedef pair<int, int> pi;
typedef pair<ll,ll> pl;
 
typedef vector<int> vi;
typedef vector<ll> vl;

typedef vector<vi> mi;
typedef vector<vl> ml;

#define FOR(i, a) for (int i = 0; i < a; i++)

int max(vector<int> v){
	int max;
	if (v.empty()){
		cout << "ERROR: max(vector vacío)" << endl;
		return max;
	}
	max = v[0];
	FOR(i,v.size()){
		int x = v[i];
		if (max < x)
			max = x;
	}
	return max;
}

int min(vector<int> v){
	int min;
	if (v.empty()){
		cout << "ERROR: min(vector vacío)" << endl;
		return min;
	}
	min = v[0];
	FOR(i,v.size()){
		int x = v[i];
		if (min > x)
			min = x;
	}
	return min;
}

// Menor a mayor //
void sort(vector<int>& v){
	sort(v.begin(), v.end());
}

void print(vector<int> v){
	FOR(i, v.size()){
		cout << v[i] << " ";
	}
	cout << endl;
}

int search(int n, vi A){
    	int primero = 0;
    	int ultimo = A.size() - 1;
    	int medio = (primero + ultimo)/2;
    	while (primero <= ultimo){
    	    if (A[medio] < n)
    	        primero = medio + 1;
    	    else if (A[medio] == n)
    	        return medio;
    	    else
    	        ultimo = medio - 1;
        medio = (primero + ultimo)/2;
	}
	return -1;
	cout << "ERROR: búsqueda fallida" << endl;
}

void reord(int n, vi v){
	int aux;
	if (n < (v.size() - 1) and v[n] > v[n+1]){
		aux = v[n];
		v[n] = v[n+1];
		v[n+1] = aux;
		reord(n+1, v);
	}
	if (n > 0 and v[n] < v[n-1]){
		aux = v[n];
		v[n] = v[n-1];
		v[n-1] = aux;
		reord(n-1, v);
	}
}

int fastpow(int b, int p){
    int sol = 1;
    while (p > 0){
        if (p % 2 == 1)
            sol = sol*b;
        p = p / 2;
        b = b * b;
    }
    return sol;
}

void auxiliar(){
	int n, k; cin >> n >> k;
	string s; cin >> s;
	bool b = true;
	if (2*k == n)
		b = false;
	while (b and k > 0){
		if (s[k-1] != s[n-k])
			b = false;
		k--;
	}
	if (b == true)
		cout << "YES" << endl;
	else 
	cout << "NO" << endl;
}

int main(){
	int t; cin >> t;	
	FOR(i,t)
		auxiliar();
}
        
