#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("unroll-loops")
using namespace std;
const long long MAX = 1000004;
const long long INF = 1e18L + 5;
template <class T, class U>
void chmin(T &t, const U &u) {
  if (t > u) t = u;
}
template <class T, class U>
void chmax(T &t, const U &u) {
  if (t < u) t = u;
}
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << " " << H;
  debug_out(T...);
}
template <typename Arg1>
void pn(Arg1 &&arg1) {
  cout << arg1 << "\n";
}
template <typename Arg1, typename... Args>
void pn(Arg1 &&arg1, Args &&...args) {
  cout << arg1 << "\n";
  pn(args...);
}
template <typename Arg1>
void ps(Arg1 &&arg1) {
  cout << arg1 << " ";
}
template <typename Arg1, typename... Args>
void ps(Arg1 &&arg1, Args &&...args) {
  cout << arg1 << " ";
  ps(args...);
}
template <typename Arg1>
void read(Arg1 &&arg1) {
  cin >> arg1;
}
template <typename Arg1, typename... Args>
void read(Arg1 &&arg1, Args &&...args) {
  cin >> arg1;
  read(args...);
}
long long n, m;
char mat[51][51];
long long dx[] = {1, 0, -1, 0};
long long dy[] = {0, 1, 0, -1};
bool valid(long long x, long long y) {
  if (x >= 0 && y >= 0 && x < n && y < m) return true;
  return false;
}
vector<vector<long long>> vis(51, vector<long long>(51, 0));
void dfs(long long x, long long y) {
  if (mat[x][y] == '#') return;
  if (mat[x][y] == 'G') {
    mat[x][y] = '.';
  }
  if (mat[x][y] == 'B') {
    return;
  }
  vis[x][y] = 1;
  for (long long i = 0; i < 4; ++i) {
    long long tx = x + dx[i];
    long long ty = y + dy[i];
    if (valid(tx, ty)) {
      if (!vis[tx][ty]) dfs(tx, ty);
    }
  }
}
void solve() {
  read(n, m);
  bool pos = true;
  for (long long i = 0; i < n; ++i)
    for (long long j = 0; j < m; ++j) read(mat[i][j]);
  for (long long i = 0; i < n; ++i) {
    for (long long j = 0; j < m; ++j) {
      if (mat[i][j] == 'B') {
        for (long long k = 0; k < 4; ++k) {
          long long tx = i + dx[k];
          long long ty = j + dy[k];
          if (valid(tx, ty)) {
            if (mat[tx][ty] == 'G') {
              pos = false;
            } else {
              if (mat[tx][ty] != 'B') mat[tx][ty] = '#';
            }
          }
        }
      }
    }
  }
  if (pos) {
    for (long long i = 0; i < n; ++i) {
      for (long long j = 0; j < m; ++j) {
        if (mat[i][j] == 'G') {
          for (long long k = 0; k < n; ++k)
            for (long long l = 0; l < m; ++l) vis[k][l] = 0;
          dfs(i, j);
          if (vis[n - 1][m - 1] == 0) {
            pos = false;
          }
        }
      }
    }
    pn(pos ? "Yes" : "No");
  } else
    pn("No");
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  long long tc = 1;
  cin >> tc;
  while (tc--) {
    solve();
  }
}
