#include <bits/stdc++.h>
using namespace std;
char f[50][50];
int v[50][50];
int n, m;
bool noBad(int r, int c) {
  if (r - 1 >= 0 && f[r - 1][c] == 'B') {
    return false;
  }
  if (r + 1 < n && f[r + 1][c] == 'B') {
    return false;
  }
  if (c - 1 >= 0 && f[r][c - 1] == 'B') {
    return false;
  }
  if (c + 1 < m && f[r][c + 1] == 'B') {
    return false;
  }
  return true;
}
void solve() {
  cin >> n >> m;
  getchar();
  int g = 0;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      cin >> f[i][j];
      v[i][j] = 0;
      if (f[i][j] == 'G') {
        g++;
      }
    }
    getchar();
  }
  queue<int> splash;
  if (f[n - 1][m - 1] != 'B' && noBad(n - 1, m - 1)) {
    splash.push(n - 1);
    splash.push(m - 1);
    v[n - 1][m - 1] = 1;
  }
  int curr, curc;
  int gr = 0;
  while (!splash.empty()) {
    curr = splash.front();
    splash.pop();
    curc = splash.front();
    splash.pop();
    if (f[curr][curc] == 'G') {
      gr++;
    }
    if (curr - 1 >= 0 && v[curr - 1][curc] == 0) {
      v[curr - 1][curc] = 1;
      if (f[curr - 1][curc] != '#' && noBad(curr - 1, curc)) {
        splash.push(curr - 1);
        splash.push(curc);
      }
    }
    if (curr + 1 < n && v[curr + 1][curc] == 0) {
      v[curr + 1][curc] = 1;
      if (f[curr + 1][curc] != '#' && noBad(curr + 1, curc)) {
        splash.push(curr + 1);
        splash.push(curc);
      }
    }
    if (curc - 1 >= 0 && v[curr][curc - 1] == 0) {
      v[curr][curc - 1] = 1;
      if (f[curr][curc - 1] != '#' && noBad(curr, curc - 1)) {
        splash.push(curr);
        splash.push(curc - 1);
      }
    }
    if (curc + 1 < m && v[curr][curc + 1] == 0) {
      v[curr][curc + 1] = 1;
      if (f[curr][curc + 1] != '#' && noBad(curr, curc + 1)) {
        splash.push(curr);
        splash.push(curc + 1);
      }
    }
  }
  if (gr < g) {
    cout << "No\n";
  } else {
    cout << "Yes\n";
  }
}
int main() {
  int t;
  cin >> t;
  for (int i = 0; i < t; ++i) {
    solve();
  }
  return 0;
}
