#include <bits/stdc++.h>
const int N = 3 * 1e5 + 5;
const long long MOD = 998244353;
const long long inf = 1e18;
using namespace std;
long long int MAXN = 100001;
long long int spf[100001];
long long int modpow(long long int x, long long int n) {
  long long int res = 1;
  while (n > 0) {
    if (n & 1) res = res * x % MOD;
    x = x * x % MOD;
    n >>= 1;
  }
  return res;
}
long long int modFact(long long int n, long long int p) {
  if (n >= p) return 0;
  long long int result = 1;
  for (long long int i = 1; i <= n; i++) result = (result * i) % p;
  return result;
}
bool isPrime(int x) {
  if (x % 2 == 0) return 0;
  for (int i = 3; i <= sqrt(x); i += 2) {
    if (x % i == 0) return 0;
  }
  return 1;
}
void solve() {
  int n, m;
  cin >> n >> m;
  char mat[n][m];
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> mat[i][j];
    }
  }
  bool can = true;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (mat[i][j] == 'B') {
        if (i + 1 < n) {
          if (mat[i + 1][j] == 'G') {
            can = false;
            break;
          } else if (mat[i + 1][j] == '.') {
            mat[i + 1][j] = '#';
          }
        }
        if (i - 1 >= 0) {
          if (mat[i - 1][j] == 'G') {
            can = false;
            break;
          } else if (mat[i - 1][j] == '.') {
            mat[i - 1][j] = '#';
          }
        }
        if (j + 1 < m) {
          if (mat[i][j + 1] == 'G') {
            can = false;
            break;
          } else if (mat[i][j + 1] == '.') {
            mat[i][j + 1] = '#';
          }
        }
        if (j - 1 >= 0) {
          if (mat[i][j - 1] == 'G') {
            can = false;
            break;
          } else if (mat[i][j - 1] == '.') {
            mat[i][j - 1] = '#';
          }
        }
      }
    }
    if (!can) {
      break;
    }
  }
  if (can) {
    queue<pair<int, int>> q;
    q.push(make_pair(n - 1, m - 1));
    if (mat[n - 1][m - 1] == '#') {
      int gc = 0;
      for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
          if (mat[i][j] == 'G') {
            gc++;
          }
        }
      }
      if (gc) {
        cout << "No\n";
      } else {
        cout << "Yes\n";
      }
      return;
    }
    bool vis[n][m];
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        vis[i][j] = false;
      }
    }
    while (!q.empty()) {
      pair<int, int> tnode = q.front();
      int i = tnode.first;
      q.pop();
      int j = tnode.second;
      if (i - 1 >= 0 && mat[i - 1][j] != '#' && !vis[i - 1][j]) {
        vis[i - 1][j] = true;
        q.push(make_pair(i - 1, j));
      }
      if (i + 1 < n && mat[i + 1][j] != '#' && !vis[i + 1][j]) {
        vis[i + 1][j] = true;
        q.push(make_pair(i + 1, j));
      }
      if (j + 1 < m && mat[i][j + 1] != '#' && !vis[i][j + 1]) {
        vis[i][j + 1] = true;
        q.push(make_pair(i, j + 1));
      }
      if (j - 1 >= 0 && mat[i][j - 1] != '#' && !vis[i][j - 1]) {
        vis[i][j - 1] = true;
        q.push(make_pair(i, j - 1));
      }
    }
    bool canagain = true;
    for (int index = 0; index < n; index++) {
      for (int index1 = 0; index1 < m; index1++) {
        if (mat[index][index1] == 'G') {
          if (!vis[index][index1]) {
            canagain = false;
          }
        }
      }
    }
    if (canagain) {
      cout << "Yes\n";
    } else {
      cout << "No\n";
    }
  } else {
    cout << "No\n";
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  int t = 1;
  cin >> t;
  while (t--) {
    solve();
  }
  cerr << "Time : " << 1000 * ((double)clock()) / (double)CLOCKS_PER_SEC
       << "ms\n";
}
