#include <bits/stdc++.h>
using namespace std;
const int modN = 1e9 + 7;
const double PI = 3.1415926535897932384626433832795028841;
int mov_x[4] = {0, 0, 1, -1};
int mov_y[4] = {1, -1, 0, 0};
int n, m;
char maze[52][52];
bool stat[52][52];
struct pos {
  int x, y;
  pos(int x = 0, int y = 0) : x(x), y(y) {}
};
void bfs(int i, int j) {
  queue<pos> q;
  stat[i][j] = 1;
  if (maze[i][j] != '#' && maze[i][j] != 'B') {
    maze[i][j] = 'G';
    q.push({i, j});
  }
  int k, x, y;
  while (q.size()) {
    for (k = 0; k < 4; k++) {
      x = q.front().x + mov_x[k];
      y = q.front().y + mov_y[k];
      if (1 <= x && x <= n && 1 <= y && y <= m) {
        if (!stat[x][y]) {
          if (maze[x][y] == '.' || maze[x][y] == 'G')
            maze[x][y] = 'G', stat[x][y] = 1, q.push({x, y});
        }
      }
    }
    q.pop();
  }
}
int main() {
  int i, j, t;
  cin >> t;
  while (t--) {
    memset(stat, 0, sizeof stat);
    cin >> n >> m;
    vector<pos> good, bad;
    for (i = 1; i < n + 1; i++)
      for (j = 1; j < m + 1; j++) {
        cin >> maze[i][j];
        if (maze[i][j] == 'G')
          good.push_back({i, j});
        else if (maze[i][j] == 'B')
          bad.push_back({i, j});
      }
    int x, y;
    bool sw = 1;
    for (i = 0; i < bad.size() && sw; i++) {
      for (j = 0; j < 4; j++) {
        x = bad[i].x + mov_x[j];
        y = bad[i].y + mov_y[j];
        maze[x][y] = '#';
      }
    }
    if (good.size()) {
      bfs(n, m);
      for (i = 0; i < good.size(); i++) {
        x = good[i].x;
        y = good[i].y;
        if (maze[x][y] == '#')
          sw = 0;
        else {
          int c = 0;
          for (j = 0; j < 4; j++) {
            x = good[i].x + mov_x[j];
            y = good[i].y + mov_y[j];
            if (maze[x][y] == 'G') c++;
          }
          if (c == 0) sw = 0;
        }
      }
    }
    cout << (sw ? "Yes" : "No") << endl;
  }
  return 0;
}
