#include <bits/stdc++.h>
const int way[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
using namespace std;
const int inf = 0x7fffffff;
const double PI = acos(-1.0);
const double eps = 1e-6;
const long long mod = 1e9 + 7;
const int N = 2e5 + 5;
int t, n, m, ok;
char mp[55][55];
bool vis[55][55];
struct node {
  int x, y;
};
void add(int x, int y) {
  for (int i = 0; i < 4; i++) {
    int nx = x + way[i][0];
    int ny = y + way[i][1];
    if (nx > 0 && nx <= n && ny > 0 && ny <= m) {
      if (mp[nx][ny] == 'G') ok = 0;
      if (mp[nx][ny] == '.') mp[nx][ny] = '#';
    }
  }
}
void bfs(int n, int m) {
  queue<node> q;
  vis[n][m] = 1;
  q.push((node){n, m});
  while (!q.empty()) {
    node u = q.front();
    q.pop();
    for (int i = 0; i < 4; i++) {
      int nx = u.x + way[i][0];
      int ny = u.y + way[i][1];
      if (nx > 0 && nx <= n && ny > 0 && ny <= m && !vis[nx][ny] &&
          mp[nx][ny] != '#') {
        vis[nx][ny] = 1;
        q.push((node){nx, ny});
      }
    }
  }
}
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> t;
  while (t--) {
    ok = 1;
    memset(vis, 0, sizeof vis);
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) cin >> mp[i][j];
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++)
        if (mp[i][j] == 'B') add(i, j);
    if (mp[n][m] != '#') bfs(n, m);
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++)
        if (mp[i][j] == 'G' && !vis[i][j]) {
          ok = 0;
          break;
        }
      if (!ok) break;
    }
    if (ok)
      cout << "YES" << '\n';
    else
      cout << "NO" << '\n';
  }
  return 0;
}
