#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
void fastio() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
}
void swap(int &x, int &y) {
  x ^= y;
  y ^= x;
  x ^= y;
}
class dsu {
 public:
  unordered_map<int, int> p, sz;
  unordered_map<int, pair<int, int>> gp;
  void make_set(int x, bool gender) {
    p[x] = x;
    sz[x] += 1;
    if (gender == 1)
      gp[x].first++;
    else
      gp[x].second++;
  }
  int find(int x) {
    if (x == p[x]) return x;
    return p[x] = find(p[x]);
  }
  void merge(int a, int b, bool ga, bool gb) {
    a = find(a);
    b = find(b);
    if (a == b) return;
    if (sz[a] < sz[b]) swap(a, b), swap(ga, gb);
    p[b] = a;
    sz[a] += sz[b];
    if (gb)
      gp[a].first++;
    else
      gp[a].second++;
    sz.erase(b);
  }
};
long long power(long long x, long long y, long long p) {
  long long res = 1;
  x %= p;
  while (y > 0) {
    if (y & 1) res = (res % p * x % p) % p;
    y >>= 1;
    x = (x % p * x % p) % p;
  }
  return res;
}
long long power(long long x, long long y) {
  long long res = 1;
  while (y > 0) {
    if (y & 1) res = (res * x);
    y >>= 1;
    x = (x * x);
  }
  return res;
}
const int mxn = 55;
char grid[mxn][mxn];
int n, m;
deque<pair<int, int>> q;
bool val(int i, int j) { return (i >= 0 && i < n) && (j >= 0 && j < m); }
void solve() {
  cin >> n >> m;
  q.clear();
  int good_count = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> grid[i][j];
      good_count += (grid[i][j] == 'G');
    }
  }
  bool ok = 1;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (grid[i][j] == 'B') {
        if (val(i + 1, j)) {
          if (grid[i + 1][j] == 'G') ok &= 0;
          grid[i + 1][j] = '#';
        }
        if (val(i - 1, j)) {
          if (grid[i - 1][j] == 'G') ok &= 0;
          grid[i - 1][j] = '#';
        }
        if (val(i, j + 1)) {
          if (grid[i][j + 1] == 'G') ok &= 0;
          grid[i][j + 1] = '#';
        }
        if (val(i, j - 1)) {
          if (grid[i][j - 1] == 'G') ok &= 0;
          grid[i][j - 1] = '#';
        }
      }
    }
  }
  if (!ok || (grid[n - 1][m - 1] == '#' && good_count != 0)) {
    cout << "NO\n";
    return;
  }
  q.push_back({n - 1, m - 1});
  while (!q.empty()) {
    pair<int, int> p = q.front();
    q.pop_front();
    grid[p.first][p.second] = 'v';
    if (val(p.first - 1, p.second) && grid[p.first - 1][p.second] != 'B' &&
        grid[p.first - 1][p.second] != '#' &&
        grid[p.first - 1][p.second] != 'v')
      q.push_back({p.first - 1, p.second});
    if (val(p.first + 1, p.second) && grid[p.first + 1][p.second] != 'B' &&
        grid[p.first + 1][p.second] != '#' &&
        grid[p.first + 1][p.second] != 'v')
      q.push_back({p.first + 1, p.second});
    if (val(p.first, p.second - 1) && grid[p.first][p.second - 1] != 'B' &&
        grid[p.first][p.second - 1] != '#' &&
        grid[p.first][p.second - 1] != 'v')
      q.push_back({p.first, p.second - 1});
    if (val(p.first, p.second + 1) && grid[p.first][p.second + 1] != 'B' &&
        grid[p.first][p.second + 1] != '#' &&
        grid[p.first][p.second + 1] != 'v')
      q.push_back({p.first, p.second + 1});
  }
  ok = 1;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      ok &= !(grid[i][j] == 'G');
    }
  }
  cout << (ok ? "YES" : "NO") << "\n";
}
int main() {
  fastio();
  int t = 1;
  cin >> t;
  while (t--) {
    solve();
  }
}
