#include <bits/stdc++.h>
using namespace std;
int main(int argc, char *argv[]) {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int T;
  cin >> T;
  while (T--) {
    int n, m;
    cin >> n >> m;
    vector<string> s(n);
    for (int i = 0; i < n; i++) cin >> s[i];
    bool ans = true;
    int d[][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
    vector<pair<int, int> > g;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++) {
        if (s[i][j] == 'B') {
          for (int k = 0; k < 4; k++) {
            int ii = i + d[k][0], jj = j + d[k][1];
            if (ii < 0 || ii >= n || jj < 0 || jj >= m) continue;
            if (s[ii][jj] == 'G') ans = false;
            if (s[ii][jj] == '.') s[ii][jj] = '#';
          }
        } else if (s[i][j] == 'G') {
          g.push_back(make_pair(i, j));
        }
      }
    if (s[n - 1][m - 1] == '#' && g.size() > 0) ans = false;
    if (ans && g.size() > 0) {
      vector<vector<int> > vi(n, vector<int>(m));
      queue<pair<int, int> > q;
      q.push(make_pair(n - 1, m - 1));
      vi[n - 1][m - 1] = 1;
      while (q.size() > 0) {
        int x = q.front().first, y = q.front().second;
        q.pop();
        for (int i = 0; i < 4; i++) {
          int ii = x + d[i][0], jj = y + d[i][1];
          if (ii < 0 || ii >= n || jj < 0 || jj >= m) continue;
          if (s[ii][jj] != '#' && vi[ii][jj] == 0) {
            q.push(make_pair(ii, jj));
            vi[ii][jj] = 1;
          }
        }
      }
      for (int k = 0; k < g.size(); k++)
        if (vi[g[k].first][g[k].second] == 0) ans = false;
    }
    cout << (ans ? "Yes" : "No") << endl;
  }
  return 0;
}
