#include <bits/stdc++.h>
using namespace std;
long long max(long long a, long long b) {
  if (a > b) return a;
  return b;
}
long long min(long long a, long long b) {
  if (a < b) return a;
  return b;
}
class doi {
 public:
  void endline(char edl) { _edl = edl; }
  template <typename T>
  void cal_pow(int base, int end, T pown[]) {
    pown[0] = 1;
    for (int i = 1; i < end; i++) pown[i] = pown[i - 1] * base;
  }
  template <typename T>
  void o_ans(T ans[], int a, int b) {
    for (int i = a; i < b; i++) cout << ans[i] << _edl;
  }
  template <typename T>
  void i_get(T arr[], int a, int b) {
    for (int i = a; i < b; i++) cin >> arr[i];
  }
  int find_nchar(string str, char c) {
    int tmp = 0;
    for (int i = 0; i < str.size(); i++) {
      if (str[i] == c) {
        tmp++;
      }
    }
    return tmp;
  }
  int base(unsigned long long int n, int k) {
    long long int tmp = 0;
    while (n >= k) {
      n /= k;
      tmp++;
    }
    return tmp;
  }
  template <typename T>
  void suffix(T arr[], int n, T suf[]) {
    suf[n - 1] = arr[n - 1];
    for (int i = n - 2; i >= 0; i--) {
      suf[i] = suf[i + 1] + arr[i];
    }
  }
  template <typename T>
  void prefix(T arr[], int n, T prf[]) {
    prf[0] = arr[0];
    for (int i = 1; i <= n; i++) {
      prf[i] = prf[i - 1] + arr[i];
    }
  }

 private:
  char _edl = '\n';
} doi;
const int MOD = 998244353, N = 52;
char a[N][N];
bool c[N][N];
int x, y, second, e;
vector<pair<int, int> > q(2);
pair<int, int> tp;
void pp(pair<int, int> tt) {
  if (e == q.size()) q.push_back(tt);
  e++;
  q[e - 1] = tt;
  return;
}
int main() {
  cin.sync_with_stdio(false), cin.tie(NULL);
  int t;
  cin >> t;
  while (t--) {
    int n, m;
    cin >> n >> m;
    for (int i = 0; i <= n; i++) fill(c[i], c[i] + m + 1, false);
    bool st = false;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        cin >> a[i][j];
      }
    }
    bool st3 = true;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        if (a[i][j] == 'B') {
          if ((i + 1 <= n && a[i + 1][j] == 'G') ||
              (i - 1 && a[i - 1][j] == 'G') || (j - 1 && a[i][j - 1] == 'G') ||
              (j + 1 <= m && a[i][j + 1] == 'G'))
            st = true;
          if (i + 1 <= n && a[i + 1][j] == '.') a[i + 1][j] = '#';
          if (i - 1 && a[i - 1][j] == '.') a[i - 1][j] = '#';
          if (j - 1 && a[i][j - 1] == '.') a[i][j - 1] = '#';
          if (j + 1 <= m && a[i][j + 1] == '.') a[i][j + 1] = '#';
        }
        if (a[i][j] == 'G') st3 = false;
      }
    }
    if (st3) {
      cout << "Yes\n";
      continue;
    }
    if (st) {
      cout << "No\n";
      continue;
    }
    q[0] = {n, m};
    second = 0;
    e = 1;
    while (e) {
      tp = q[e - 1];
      e--;
      c[tp.first][tp.second] = true;
      x = tp.first, y = tp.second;
      if ((x + 1) <= n && a[x + 1][y] != '#' && !c[x + 1][y]) pp({x + 1, y});
      if ((x - 1) && a[x - 1][y] != '#' && !c[x - 1][y]) pp({x - 1, y});
      if ((y + 1) <= m && a[x][y + 1] != '#' && !c[x][y + 1]) pp({x, y + 1});
      if ((y - 1) && a[x][y - 1] != '#' && !c[x][y - 1]) pp({x, y - 1});
    }
    bool st2 = true;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        if (a[i][j] == 'G' && !c[i][j]) st2 = false;
      }
    }
    if (st2 && a[n][m] != '#')
      cout << "Yes\n";
    else
      cout << "No\n";
  }
  return 0;
}
