#include <bits/stdc++.h>
using namespace std;
template <class T, class second>
ostream& operator<<(ostream& s, pair<T, second>& p) {
  s << '{' << p.first << ", " << p.second << '}';
  return s;
}
template <class T>
ostream& operator<<(ostream& s, vector<T>& v) {
  if (v.empty()) {
    s << "[]";
    return s;
  }
  s << '[';
  for (int i = 0; i < v.size() - 1; i++) {
    s << v[i] << ", ";
  }
  s << v.back() << ']';
  return s;
}
static mt19937 random_gen(
    chrono::high_resolution_clock::now().time_since_epoch().count());
int rand() {
  static uniform_int_distribution<int> uid(0, INT32_MAX);
  return uid(random_gen);
}
int n, m;
string inp[51];
int stats[51][51];
bool check(int i, int j) {
  if (i < 0 || i >= n || j < 0 || j >= m) return true;
  if (inp[i][j] == 'G') return false;
  if (inp[i][j] != 'B') inp[i][j] = '#';
  return true;
}
void st(int i, int j) {
  if (i < 0 || j < 0 || i >= n || j >= m || stats[i][j] == 3 ||
      inp[i][j] == '#')
    return;
  stats[i][j] = 3;
  st(i + 1, j);
  st(i, j + 1);
  st(i - 1, j);
  st(i, j - 1);
}
void dfs(int i, int j) {
  if (i < 0 || j < 0 || stats[i][j] || inp[i][j] == '#') {
    if (i >= 0 && j >= 0) stats[i][j] |= 1;
    return;
  }
  st(i, j);
  dfs(i - 1, j);
  dfs(i, j - 1);
}
int main() {
  int t;
  scanf("%d", &t);
  while (t--) {
    cin >> n >> m;
    int cg = 0;
    for (int i = 0; i < n; i++) {
      cin >> inp[i];
      for (int j = 0; j < m; j++) cg += inp[i][j] == 'G', stats[i][j] = 0;
    }
    if (cg == 0) {
      puts("Yes");
      continue;
    }
    bool ok = true;
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        if (inp[i][j] == 'B') {
          ok &= check(i + 1, j);
          ok &= check(i - 1, j);
          ok &= check(i, j + 1);
          ok &= check(i, j - 1);
        }
      }
    }
    dfs(n - 1, m - 1);
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        if (inp[i][j] == 'G') ok &= stats[i][j] == 3;
      }
    }
    puts(ok ? "Yes" : "No");
  }
  return 0;
}
