#include <bits/stdc++.h>
using namespace std;
const int MOD = (int)1e9 + 7;
const int MAX = 1e6;
int visit[52][52], marked[52][52];
int R, C;
int row[] = {1, 0, -1, 0, 1, -1, 1, -1};
int colm[] = {0, 1, 0, -1, 1, -1, -1, 1};
string maze[100];
void bfs(int input_x, int input_y) {
  marked[input_x][input_y] = 1;
  memset(visit, 0, sizeof(visit));
  queue<pair<int, int> > q;
  visit[input_x][input_y] = 1;
  q.push(make_pair(input_x, input_y));
  while (!q.empty()) {
    int x = q.front().first;
    int y = q.front().second;
    q.pop();
    for (int i = 0; i < 4; i++) {
      int u = x + row[i];
      int v = y + colm[i];
      if (0 <= u && u < R && 0 <= v && v < C) {
        if (visit[u][v] == 0 && (maze[u][v] == '.' || maze[u][v] == 'G')) {
          if (maze[u][v] == 'G') marked[u][v] = 1;
          visit[u][v] = 1;
          q.push(make_pair(u, v));
        }
      }
    }
  }
  return;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int t;
  cin >> t;
  while (t--) {
    memset(marked, 0, sizeof(marked));
    cin >> R >> C;
    for (int i = 0; i < R; i++) cin >> maze[i];
    int flg = 0;
    vector<pair<int, int> > v;
    for (int i = 0; i < R; i++) {
      for (int j = 0; j < C; j++) {
        if (maze[i][j] == 'B') {
          if (i - 1 >= 0) {
            if (maze[i - 1][j] == 'G') {
              flg = 1;
              break;
            } else if (maze[i - 1][j] == '.')
              maze[i - 1][j] = '#';
          }
          if (i + 1 < R) {
            if (maze[i + 1][j] == 'G') {
              flg = 1;
              break;
            } else if (maze[i + 1][j] == '.')
              maze[i + 1][j] = '#';
          }
          if (j - 1 >= 0) {
            if (maze[i][j - 1] == 'G') {
              flg = 1;
              break;
            } else if (maze[i][j - 1] == '.')
              maze[i][j - 1] = '#';
          }
          if (j + 1 < C) {
            if (maze[i][j + 1] == 'G') {
              flg = 1;
              break;
            } else if (maze[i][j + 1] == '.')
              maze[i][j + 1] = '#';
          }
        }
        if (maze[i][j] == 'G') v.push_back({i, j});
      }
      if (flg) break;
    }
    if (flg)
      cout << "No" << endl;
    else {
      for (auto x : v) {
        if (maze[x.first][x.second] == 'G' && !marked[x.first][x.second]) {
          bfs(x.first, x.second);
          if (!visit[R - 1][C - 1]) {
            flg = 1;
            break;
          }
        }
      }
      if (flg)
        cout << "No" << endl;
      else
        cout << "Yes" << endl;
    }
  }
  return 0;
}
