#include <bits/stdc++.h>
using namespace std;
template <class t, class u>
void chmax(t& first, u second) {
  if (first < second) first = second;
}
template <class t, class u>
void chmin(t& first, u second) {
  if (second < first) first = second;
}
int dx[] = {-1, 0, 0, 1}, dy[] = {0, -1, 1, 0};
int n, m;
bool valid(int x, int y) { return (x > -1 && x < n && y > -1 && y < m); }
char mat[52][52];
bool used[52][52];
bool invalid(int x, int y) {
  return !valid(x, y) || used[x][y] || mat[x][y] == '#';
}
void dfs(int fx, int fy) {
  used[fx][fy] = 1;
  for (int i = 0; i < 4; i++) {
    int tx = fx + dx[i], ty = fy + dy[i];
    if (invalid(tx, ty)) continue;
    dfs(tx, ty);
  }
}
bool check() {
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (mat[i][j] == 'G' && !used[i][j]) return 0;
    }
  }
  return 1;
}
void print() {
  for (int i = 0; i < n; i++) printf("%s\n", mat[i]);
}
void solve() {
  scanf("%d", &n);
  scanf("%d", &m);
  for (int i = 0; i < n; i++) scanf("%s", mat[i]);
  memset(used, 0, sizeof(used));
  dfs(n - 1, m - 1);
  if (!check()) {
    printf("No\n");
    return;
  }
  queue<pair<int, int> > q;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (mat[i][j] == 'B' && used[i][j]) q.push(make_pair(i, j));
  while (!q.empty()) {
    int fx = q.front().first, fy = q.front().second;
    q.pop();
    for (int i = 0; i < 4; i++) {
      int tx = fx + dx[i], ty = fy + dy[i];
      if (valid(tx, ty) && mat[tx][ty] == '.') {
        mat[tx][ty] = '#';
      } else if (valid(tx, ty) && mat[tx][ty] == 'G') {
        printf("No\n");
        return;
      }
    }
  }
  bool ok = false;
  for (int i = 0; i < n && !ok; i++) {
    for (int j = 0; j < m && !ok; j++) {
      if (mat[i][j] == 'G') ok = true;
    }
  }
  if (mat[n - 1][m - 1] == '#' && ok) {
    printf("No\n");
    return;
  } else if (mat[n - 1][m - 1] == '#' && !ok) {
    printf("Yes\n");
    return;
  } else {
    memset(used, 0, sizeof(used));
    dfs(n - 1, m - 1);
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++)
        if (mat[i][j] == 'G' && !used[i][j]) {
          printf("No\n");
          return;
        } else if (mat[i][j] == 'B' && used[i][j]) {
          printf("No\n");
          return;
        }
    }
    printf("Yes\n");
  }
}
int main() {
  int t;
  scanf("%d", &t);
  while (t--) {
    solve();
  }
  return 0;
}
