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.
import java.util.*;
import java.io.*;

public class Main {
	static final int M = 1000000007;
	static FastReader in = new FastReader();
//	static PrintWriter out = new PrintWriter(System.out);
//	static Scanner in = new Scanner(System.in);
//	File file = new File("input.txt");
//	Scanner in = new Scanner(file);
//	PrintWriter out = new PrintWriter(new FileWriter("output.txt"));
//	Arrays.sort(arr, Comparator.comparingDouble(o -> o[0])); // use as int[n][2];
//	static boolean[] prime = new boolean[1100001];
	public static void main(String[] args) {
		
		int t = in.nextInt();
		while(t-- > 0) {
			int n = in.nextInt(), k = in.nextInt();
			String str = in.next();
				boolean flag = true;
				int i = 0, j = n-1;
				while(k-- > 0) {
					if(str.charAt(i)!=str.charAt(j)) {
						flag = false;
						break;
					}
					i++;
					j--;
					if(j<i) {
						flag = false;
						break;
					}
				}
				if(!flag) {
					System.out.println("NO");
				}else {
					String s1 = str.substring(0, i+1);
					String s2 = str.substring(i+1, j+1);
					String s3 = str.substring(j+1, str.length());
					if(str.equals(s1+s2+s3)) {
						System.out.println("YES");
					}else System.out.println("NO");
				}
				
			
		}
	}
	
	static void sieve(int n, boolean[] prime)
    {
        for (int i = 0; i <= n; i++)
            prime[i] = true;
 
        for (int p = 2; p * p <= n; p++) 
        {
            if (prime[p] == true) 
            {
                for (int i = p * p; i <= n; i += p)
                    prime[i] = false;
            }
        }
    }
	static int gcd(int a, int b) {
		if(b==0) return a;
		return gcd(b, a%b);
	}
	
	static class Pair{
		int f;
		int s;
		public Pair(int x, int y){
			this.f = x;
			this.s = y;
		}
	}

	static class FastReader {
		BufferedReader br;
		StringTokenizer st;

		public FastReader() {
			br = new BufferedReader(new
					InputStreamReader(System.in));
		}

		String next() {
			while (st == null || !st.hasMoreElements()) {
				try {
					st = new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			return st.nextToken();
		}

		int nextInt() {
			return Integer.parseInt(next());
		}

		long nextLong() {
			return Long.parseLong(next());
		}

		double nextDouble() {
			return Double.parseDouble(next());
		}

		String nextLine() {
			String str = "";
			try {
				str = br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return str;
		}
	}
}