#include <bits/stdc++.h>
using namespace std;
long long int dx[] = {1, -1, 0, 0};
long long int dy[] = {0, 0, 1, -1};
inline bool inrange(long long int x, long long int y, long long int n,
                    long long int m) {
  return (x >= 0 && x < n && y >= 0 && y < m);
}
int main() {
  long long int t;
  cin >> t;
  while (t--) {
    long long int n, m;
    cin >> n >> m;
    char ch[n][m];
    for (long long int i = 0; i < n; i++)
      for (long long int j = 0; j < m; j++) cin >> ch[i][j];
    for (long long int i = 0; i < n; i++) {
      for (long long int j = 0; j < m; j++) {
        if (ch[i][j] == 'B') {
          for (long long int k = 0; k < 4; k++) {
            long long int tx = i + dx[k];
            long long int ty = j + dy[k];
            if (inrange(tx, ty, n, m)) {
              if (ch[tx][ty] == '.') {
                ch[tx][ty] = '#';
              }
            }
          }
        }
      }
    }
    queue<pair<long long int, long long int> > q;
    long long int vis[n][m];
    for (long long int i = 0; i < n; i++)
      for (long long int j = 0; j < m; j++) vis[i][j] = false;
    if (ch[n - 1][m - 1] == '.') {
      q.push({n - 1, m - 1});
      vis[n - 1][m - 1] = true;
    }
    while (!q.empty()) {
      long long int fx = q.front().first;
      long long int fy = q.front().second;
      q.pop();
      for (long long int i = 0; i < 4; i++) {
        long long int tx = fx + dx[i];
        long long int ty = fy + dy[i];
        if (inrange(tx, ty, n, m)) {
          if (!vis[tx][ty] && ch[tx][ty] != '#') {
            vis[tx][ty] = true;
            q.push({tx, ty});
          }
        }
      }
    }
    bool ok = true;
    for (long long int i = 0; i < n; i++) {
      for (long long int j = 0; j < m; j++) {
        if ((ch[i][j] == 'G' && !vis[i][j]) or (ch[i][j] == 'B' && vis[i][j])) {
          ok = false;
          break;
        }
      }
    }
    puts(ok ? "YES" : "NO");
  }
  return 0;
}
