#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const long long INF = 0x3f3f3f3f3f3f3f3f;
const int inf = 0x3f3f3f3f;
const int maxn = 2e5 + 5;
const double eps = 1e-8;
const double pi = acos(-1.0);
long long gcd(long long a, long long b) { return !b ? a : gcd(b, a % b); }
long long lcm(long long a, long long b) { return a * b / gcd(a, b); }
long long qw(long long x, long long y) {
  long long res = 1;
  while (y) {
    if (y & 1) res *= x;
    x = x * x;
    y >>= 1;
  }
  return res;
}
long long poww(long long x, long long y, long long p) {
  long long ans = 1;
  while (y) {
    if (y & 1) ans = ans * x % p;
    x = x * x % p;
    y >>= 1;
  }
  return ans % p;
}
bool isp(long long x) {
  if (x < 2) return 0;
  for (long long i = 2; i * i <= x; i++) {
    if (x % i == 0) return 0;
  }
  return 1;
}
int t, n, m;
char s[55][55];
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};
bool vis[55][55];
bool in(int x, int y) { return x >= 0 && x < n && y >= 0 & y < m; }
void solve() {
  bool good = 1;
  for (int i = (0); i <= (n); i++) {
    for (int j = (0); j <= (m); j++) vis[i][j] = 0;
  }
  for (int i = (0); i <= (n - 1); i++) {
    for (int j = (0); j <= (m - 1); j++) {
      if (s[i][j] == 'B') {
        for (int k = (0); k <= (3); k++) {
          int tx = i + dx[k], ty = j + dy[k];
          if (in(tx, ty)) {
            if (s[tx][ty] == 'G')
              good = 0;
            else if (s[tx][ty] == '.')
              s[tx][ty] = '#';
          }
        }
      }
    }
  }
  if (!good)
    puts("No");
  else {
    queue<pair<int, int> > q;
    if (s[n - 1][m - 1] != '#') {
      q.push(make_pair(n - 1, m - 1));
      vis[n - 1][m - 1] = 1;
    }
    while (!q.empty()) {
      int x = q.front().first, y = q.front().second;
      q.pop();
      for (int i = 0; i < 4; i++) {
        int tx = x + dx[i], ty = y + dy[i];
        if (in(tx, ty) && !vis[tx][ty] && s[tx][ty] != '#') {
          q.push(make_pair(tx, ty));
          vis[tx][ty] = 1;
        }
      }
    }
    for (int i = (0); i <= (n - 1); i++) {
      for (int j = (0); j <= (m - 1); j++) {
        if (s[i][j] == 'B')
          good &= (!vis[i][j]);
        else if (s[i][j] == 'G') {
          good &= vis[i][j];
        }
      }
    }
    if (good)
      puts("Yes");
    else
      puts("No");
  }
  return;
}
int main() {
  scanf("%d", &t);
  while (t--) {
    scanf("%d %d", &n, &m);
    for (int i = 0; i < n; i++) scanf("%s", s[i]);
    solve();
  }
  return 0;
}
