#include <bits/stdc++.h>
using namespace std;
int n, m;
char a[55][55];
bool vis[55][55];
int bad, good;
void dfs(int r, int c) {
  if (r < 0 || r >= n || c < 0 || c >= m) return;
  if (vis[r][c] || a[r][c] == '.' || a[r][c] == '#') return;
  vis[r][c] = true;
  if (a[r][c] == 'B')
    bad += 1;
  else
    good += 1;
  dfs(r - 1, c);
  dfs(r + 1, c);
  dfs(r, c - 1);
  dfs(r, c + 1);
}
void check(int r, int c) {
  if (r < 0 || r >= n || c < 0 || c >= m) return;
  if (vis[r][c] || a[r][c] == 'B' || a[r][c] == '#') return;
  vis[r][c] = true;
  if (a[r][c] == 'G') good += 1;
  check(r - 1, c);
  check(r + 1, c);
  check(r, c - 1);
  check(r, c + 1);
}
int main() {
  int t;
  cin >> t;
  while (t--) {
    int i, j, tot = 0;
    cin >> n >> m;
    for (i = 0; i < n; i++) {
      cin >> a[i];
    }
    for (i = 0; i < n; i++) {
      for (j = 0; j < m; j++) {
        vis[i][j] = false;
      }
    }
    bool ans = true;
    for (i = 0; i < n; i++) {
      for (j = 0; j < m; j++) {
        if (a[i][j] == 'B' && !vis[i][j]) {
          bad = 0;
          good = 0;
          dfs(i, j);
          if (good > 0) {
            ans = false;
            break;
          }
        }
        if (a[i][j] == 'G') tot += 1;
      }
      if (!ans) break;
    }
    if (!ans) {
      cout << "No\n";
      continue;
    }
    for (i = 0; i < n; i++) {
      for (j = 0; j < m; j++) {
        if (a[i][j] == 'B') {
          if (i - 1 >= 0 && a[i - 1][j] == '.') a[i - 1][j] = '#';
          if (i + 1 < n && a[i + 1][j] == '.') a[i + 1][j] = '#';
          if (j - 1 >= 0 && a[i][j - 1] == '.') a[i][j - 1] = '#';
          if (j + 1 < m && a[i][j + 1] == '.') a[i][j + 1] = '#';
        }
        vis[i][j] = false;
      }
    }
    good = 0;
    check(n - 1, m - 1);
    if (good == tot)
      cout << "Yes\n";
    else
      cout << "No\n";
  }
  return 0;
}
