#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
const long double PI = acos(-1.0);
int g = 0, b = 0, n, m;
void dfs(vector<vector<char>>& ar, vector<vector<int>>& vis, int i, int j) {
  if (i < 0 || j < 0 || i >= n || j >= m) return;
  if (ar[i][j] == '#') return;
  if (vis[i][j]) return;
  vis[i][j] = 1;
  if (ar[i][j] == 'B') {
    b += 1;
    return;
  }
  if (ar[i][j] == 'G') g += 1;
  dfs(ar, vis, i + 1, j);
  dfs(ar, vis, i - 1, j);
  dfs(ar, vis, i, j + 1);
  dfs(ar, vis, i, j - 1);
};
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int t;
  cin >> t;
  while (t--) {
    cin >> n >> m;
    vector<vector<char>> ar(n, vector<char>(m));
    int good = 0, bad = 0;
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < m; ++j) {
        cin >> ar[i][j];
        if (ar[i][j] == 'G') good += 1;
        if (ar[i][j] == 'B') bad += 1;
      }
    }
    auto valid = [&](int i, int j) -> bool {
      if (i < 0 || j < 0 || i >= n || j >= m) return false;
      return true;
    };
    auto mark = [&](int i, int j) -> int {
      int f = 1;
      if (valid(i, j)) {
        if (ar[i][j] == 'G') {
          f = 0;
        } else if (ar[i][j] == 'B') {
        } else
          ar[i][j] = '#';
      }
      return f;
    };
    auto fill = [&](int i, int j) -> int {
      int f = 1;
      f &= mark(i + 1, j);
      f &= mark(i - 1, j);
      f &= mark(i, j + 1);
      f &= mark(i, j - 1);
      return f;
    };
    int f = 1;
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < m; ++j) {
        if (ar[i][j] == 'B') {
          f &= fill(i, j);
        }
      }
    }
    g = 0, b = 0;
    vector<vector<int>> vis(n, vector<int>(m, 0));
    if (!f) {
      cout << "NO" << endl;
      continue;
    } else {
      dfs(ar, vis, n - 1, m - 1);
      if (b == 0 && g == good) {
        cout << "YES" << endl;
      } else {
        cout << "NO" << endl;
      }
    }
  }
  return 0;
}
