#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
template <typename Type>
istream &operator>>(istream &in, vector<Type> &vec) {
  long long n = vec.size();
  for (int i = 0; i < n; i++) in >> vec[i];
  return in;
}
template <typename Type>
ostream &operator<<(ostream &out, vector<Type> &vec) {
  for (auto val : vec) out << val << " ";
  out << endl;
  return out;
}
vector<pair<long long, long long>> directions = {
    {1, 0}, {-1, 0}, {0, 1}, {0, -1}};
struct DisjointSetTree {
  long long comp_count;
  vector<long long> parent, comp_size;
  set<long long> roots;
  DisjointSetTree(int n) {
    comp_count = n;
    parent.resize(n);
    comp_size.resize(n, 1);
    iota(parent.begin(), parent.end(), 0);
    for (int i = 0; i < n; i++) {
      roots.insert(i);
    }
  }
  int find(int u) {
    if (parent[u] == u) return parent[u];
    return parent[u] = find(parent[u]);
  }
  bool merge(int u, int v) {
    u = find(u), v = find(v);
    if (u == v) return false;
    parent[u] = v;
    comp_size[v] += comp_size[u];
    comp_size[u] = 0;
    roots.erase(u);
    comp_count--;
    return true;
  }
};
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  long long t;
  cin >> t;
  while (t--) {
    long long n, m;
    cin >> n >> m;
    vector<string> mat(n);
    cin >> mat;
    bool ans = true;
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        for (pair<long long, long long> dir : directions) {
          long long x = i + dir.first, y = j + dir.second;
          if (x < 0 || x >= n || y < 0 || y >= m) {
            continue;
          } else if (mat[i][j] == 'B' && mat[x][y] == 'G') {
            ans = false;
            break;
          } else if (mat[i][j] == 'B' && mat[x][y] == '.') {
            mat[x][y] = '#';
          }
        }
      }
    }
    DisjointSetTree dsu(n * m);
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        for (pair<long long, long long> dir : directions) {
          long long x = i + dir.first, y = j + dir.second;
          if (x < 0 || x >= n || y < 0 || y >= m) {
            continue;
          } else if ((mat[i][j] == 'G' || mat[i][j] == '.') &&
                     mat[x][y] != '#') {
            dsu.merge(i * m + j, x * m + y);
          }
        }
      }
    }
    long long comp = dsu.find(n * m - 1);
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        if (mat[i][j] == 'G' && dsu.find(i * m + j) != comp) {
          ans = false;
          break;
        }
      }
    }
    cout << (ans ? "Yes" : "No") << endl;
  }
}
