#include <bits/stdc++.h>
using namespace std;
long long global = 0;
void test_case(long long);
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long t;
  int yes = 1;
  if (yes)
    cin >> t;
  else
    t = 1;
  for (long long T = 0; T < t; T++) {
    test_case(T);
  }
  return 0;
}
void test_case(long long T) {
  long long n, m;
  cin >> n >> m;
  vector<string> vec(n);
  for (long long(i) = 0; (i) < n; (i)++) {
    cin >> vec[i];
  }
  vector<long long> x = {0, 1, 0, -1}, y = {1, 0, -1, 0};
  long long g = 0;
  for (long long(i) = 0; (i) < n; (i)++) {
    for (long long(j) = 0; (j) < m; (j)++) {
      if (vec[i][j] == 'G') g++;
      if (vec[i][j] == 'B') {
        for (long long k = 0; k < 4; k++) {
          long long idx = i + x[k];
          long long jdx = j + y[k];
          if (idx >= 0 && idx < n && jdx >= 0 && jdx < m) {
            if (vec[idx][jdx] == 'G') {
              cout << "no" << endl;
              return;
            } else if (vec[idx][jdx] == '.') {
              vec[idx][jdx] = '#';
            }
          }
        }
      }
    }
  }
  queue<pair<long long, long long>> q;
  q.push(pair<long long, long long>(n - 1, m - 1));
  map<pair<long long, long long>, long long> v;
  v[pair<long long, long long>(n - 1, m - 1)]++;
  long long vg = 0;
  while (!q.empty()) {
    auto f = q.front();
    q.pop();
    if (vec[f.first][f.second] == 'G')
      vg++;
    else if (vec[f.first][f.second] == '#')
      break;
    for (long long k = 0; k < 4; k++) {
      long long idx = f.first + x[k];
      long long jdx = f.second + y[k];
      if (idx >= 0 && idx < n && jdx >= 0 && jdx < m) {
        if (vec[idx][jdx] == '#' || vec[idx][jdx] == 'B') continue;
        if (!v[pair<long long, long long>(idx, jdx)]) {
          v[pair<long long, long long>(idx, jdx)]++;
          q.push(pair<long long, long long>(idx, jdx));
        }
      }
    }
  }
  if (vg == g)
    cout << "yes" << endl;
  else
    cout << "no" << endl;
}
