#include <bits/stdc++.h>
using namespace std;
struct vec {
  long double x, y;
  bool operator==(const vec &a) const { return x == a.x && y == a.y; }
  bool operator<(const vec &a) const {
    if (a.x != x) return x < a.x;
    return y < a.y;
  }
  vec operator+(const vec &a) const { return {x + a.x, y + a.y}; }
  vec operator*(const long double &a) const { return {x * a, y * a}; }
  vec operator-(const vec &a) const { return {x - a.x, y - a.y}; }
  vec operator/(const long double &a) const { return {x / a, y / a}; }
  long double len() const { return sqrt(x * x + y * y); }
  long double dot(const vec &a) const { return x * a.x + y * a.y; }
  long double crs(const vec &a) const { return x * a.y - y * a.x; }
  vec proj(const vec &a) const {
    return (a / a.len()) * (*this).dot(a) / a.len();
  }
};
struct P {
  int x, y, z;
  bool operator<(const P &a) const { return x < a.x; }
};
bool as(P a, P b) { return a.x < b.x; }
long long x, y, z, mod = 998244353;
vector<int> v;
int i, n, m, k, a, d, b, c, dx[10] = {1, 2, 2, 1, -1, -2, -2, -1},
                            dy[10] = {2, 1, -1, -2, -2, -1, 1, 2};
int e;
int o[311115];
int l[5331];
int j[1];
int par[1];
stack<int> s;
priority_queue<int> q;
P u[311111];
string r;
int main() {
  scanf("%d", &e);
  for (int t = 1; t <= e; t++) {
    for (; q.size(); q.pop())
      ;
    scanf("%d %d", &a, &b);
    cin >> r;
    n = 0;
    for (int t = 0; t < r.size(); t++)
      if (r[t] == '.')
        n++;
      else {
        q.push(n);
        n = 0;
      }
    q.push(n);
    if (q.top() < 2 * b) {
      for (int i = 1;; q.pop(), i++) {
        if (i % 2) {
          if (q.size() == 0 || a > q.top()) {
            puts("NO");
            goto qwe;
          }
        } else {
          if (q.size() == 0 || b > q.top()) {
            puts("YES");
            goto qwe;
          }
        }
      }
    }
    if (a > q.top()) {
      puts("NO");
      goto qwe;
    }
    if (q.top() <= a + 2 * (b - 1)) {
      q.pop();
      if (q.size() && q.top() >= 2 * b) goto qwer;
      for (int i = 2;; q.pop(), i++) {
        if (i % 2) {
          if (q.size() == 0 || a > q.top()) {
            goto qwer;
          }
        } else {
          if (q.size() == 0 || b > q.top()) {
            puts("YES");
            goto qwe;
          }
        }
      }
    }
  qwer:;
    for (; q.size(); q.pop())
      ;
    n = 0;
    for (int t = 0; t < r.size(); t++)
      if (r[t] == '.')
        n++;
      else {
        q.push(n);
        n = 0;
      }
    q.push(n);
    if (q.top() >= a * 2 && a <= 2 * b - 1 && q.top() < 3 * b + a - 1) {
      d = q.top();
      q.pop();
      q.push(a);
      if (q.top() >= 2 * b) {
        goto qwed;
      }
      for (int i = 2;; q.pop(), i++) {
        if (i % 2) {
          if (q.size() == 0 || a > q.top()) {
            goto qwed;
          }
        } else {
          if (q.size() == 0 || b > q.top()) {
            puts("YES");
            goto qwe;
          }
        }
      }
    }
  qwed:;
    for (; q.size(); q.pop())
      ;
    n = 0;
    for (int t = 0; t < r.size(); t++)
      if (r[t] == '.')
        n++;
      else {
        q.push(n);
        n = 0;
      }
    q.push(n);
    if (q.top() >= a * 3 && a <= 2 * b - 1) {
      if (q.top() > a + b * 4 - 2) {
        puts("NO");
        goto qwe;
      }
      d = q.top();
      q.pop();
      q.push(a);
      q.push(a);
      if (q.top() >= 2 * b) {
        puts("NO");
        goto qwe;
      }
      for (int i = 2;; q.pop(), i++) {
        if (i % 2) {
          if (q.size() == 0 || a > q.top()) {
            puts("NO");
            goto qwe;
          }
        } else {
          if (q.size() == 0 || b > q.top()) {
            puts("YES");
            goto qwe;
          }
        }
      }
    }
    puts("NO");
  qwe:;
  }
}
