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>
using namespace std;
#define pb  push_back
#define ppb pop_back
#define pf  push_front
#define ppf pop_front
#define eb emplace_back
#define mt make_tuple

typedef pair<int, int> pairs;
typedef pair<pair<int,int>,pair<int,int>> pairofpairs;

#define int long long
#define rep(i,j, k)    for(int i = j; i < (k); ++i)
#define repd(i, a, n)  for(int i = a; i > (n); --i)
#define trav(a, x) for(auto& a : x)
#define ms0(X) memset((X), 0, sizeof((X)))
#define ms1(X) memset((X), -1, sizeof((X)))
#define fi first
#define se second
#define vc vector
#define sz(x) x.size()
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define pq  priority_queue<int> 
#define pql priority_queue<int,vector<int>,greater<int>> // smallest element
#define pii  pair<int,int>
#define msi  map<string,int>
#define mii  map<int,int>
#define spii set<pair<int,int>>
#define psi  pair<string,int>
#define pis  pair<int,string>
#define piii pair<int,pii>

#define sum(a)     ( accumulate ((a).begin(), (a).end(), 0ll))
#define mine(a)    (*min_element((a).begin(), (a).end()))
#define maxe(a)    (*max_element((a).begin(), (a).end()))
#define mini(a)    ( min_element((a).begin(), (a).end()) - (a).begin())
#define maxi(a)    ( max_element((a).begin(), (a).end()) - (a).begin())
#define lowb(a, x) ( lower_bound((a).begin(), (a).end(), (x)) - (a).begin())
#define uppb(a, x) ( upper_bound((a).begin(), (a).end(), (x)) - (a).begin())
int gcd(int a,int b){
    if(b==0)return a;
    return gcd(b,a%b);
}
#define ios ios_base::sync_with_stdio(false); cin.tie(NULL)
#define nl "\n"
    // To sort the array in decreasing order 
    // use greater <int>() as an third arguments 
    // sort(arr, arr + n, greater<int>()); 
    // set<int,greater<int>> s
int max(int a,int b){
  return (a>b?a:b);
}
void printa(int arr[], int n) 
{ 

    for (int i = 0; i < n; i++) { 
        cout << arr[i] << ' '; 
    } 
    cout<<nl;
} 
void printv( vector<int> v) 
{ 
  
    for (int i = 0; i < sz(v); i++) { 
        cout << v[i] << ' '; 
    } 
    cout<<nl;
}
void printset(set<int> s)
{
  for(auto x:s){
    cout<<x<<" ";
  }
  cout<<nl;
}
void printmset(multiset<int> s)
{
  for(auto x:s){
    cout<<x<<" ";
  }
  cout<<nl;
}
void printmgset(multiset<int,greater<int>> s)
{
  for(auto x:s){
    cout<<x<<" ";
  }
  cout<<nl;
}

/*

void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '\"' << x << '\"';}
void __print(const string &x) {cerr << '\"' << x << '\"';}
void __print(bool x) {cerr << (x ? "true" : "false");}

template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#ifndef ONLINE_JUDGE
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define debug(x...)
#endif

*/
const long long inf=1e18;
const int32_t M=1e9+7;
const int32_t MM=998244353;
 
//const int N=0;
int fact(int n){
	return (n==1 || n==0) ? 1: n*fact(n-1);
}
const int N=1e5+1;
vc<int> a;
vc<int> b;
void solve(){
   int n,k;
   cin>>n>>k;
   string s;
   cin>>s;
   if(k==0){
     cout<<"YES"<<nl;
     return;
   }
   if(n==1 && k!=0){
     cout<<"NO"<<nl;
     return;
   }
  //  int flag=0;
  //  rep(i,0,n-1){
  //     if(s[i]!=s[i+1]){
  //       flag=1;
  //     }
  //  }
  //  if(!flag && n-2*k>0){
  //    cout<<"YES"<<nl;
  //    return;
  //  }
   // k=
   int i=0;
   int j=n-1;
   int c=0;
   while(s[i]==s[j] && i<j){
      c++;
      i++;
      j--;   
   }
  //  cout<<c<<nl;
  //  cout<<i<<" "<<j<<nl;
  //  if((s[i]!=s[j])|| i>=j){
  //     i--;
  //     j--;
  //  }
  i--;
  j++;
   if(c>=k && j-i+c-k>1){
     cout<<"YES"<<nl; 
   }
   else{
     cout<<"NO"<<nl;
   }
} 
signed main(){	
	ios;
  // #ifndef ONLINE_JUDGE
  // freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
  // #endif
	int t=1;
  cin >> t;
  while(t--) {solve();}
  cerr << "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n";
	return 0;
}