#include <bits/stdc++.h>
using namespace std;
inline long long _gcd(long long a, long long b) {
  while (b) b %= a ^= b ^= a ^= b;
  return a;
}
inline pair<int, int> operator+(pair<int, int> a, pair<int, int> b) {
  return {a.first + b.first, a.second + b.second};
}
inline ostream& operator<<(ostream& o, pair<int, int> p) {
  o << p.first << " " << p.second;
  return o;
}
template <typename>
struct is_std_vector : std::false_type {};
template <typename T, typename A>
struct is_std_vector<std::vector<T, A>> : std::true_type {};
template <typename T>
inline ostream& operator<<(ostream& o, vector<T>& p) {
  for (int i = 0; i < p.size(); ++i) {
    o << setw(3) << p[i];
    if (is_std_vector<T>::value) o << "\n";
  }
  return o;
}
const int siz = 51;
char board[siz][siz];
int n, m;
bool isblockable(int i, int j) {
  if (i < 0 || i >= n) return true;
  if (j < 0 || j >= m) return true;
  if (board[i][j] != 'G') {
    if (board[i][j] != 'B') board[i][j] = '#';
    return true;
  }
  return false;
}
bool blockBad() {
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      if (board[i][j] == 'B') {
        if (!isblockable(i, j - 1)) {
          return false;
        }
        if (!isblockable(i - 1, j)) {
          return false;
        }
        if (!isblockable(i, j + 1)) {
          return false;
        }
        if (!isblockable(i + 1, j)) {
          return false;
        }
      }
    }
  }
  return true;
}
bool visited[siz][siz];
long long dfs(int i, int j) {
  if (i < 0 || i >= n) return 0;
  if (j < 0 || j >= m) return 0;
  if (board[i][j] == '#') return 0;
  if (visited[i][j]) return 0;
  visited[i][j] = true;
  long long counter = 0;
  if (board[i][j] == 'G') counter += 1;
  if (board[i][j] == 'B') counter += INT_MIN;
  return counter + dfs(i - 1, j) + dfs(i, j - 1) + dfs(i, j + 1) +
         dfs(i + 1, j);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int t;
  cin >> t;
  while (t--) {
    cin >> n >> m;
    int cgood = 0;
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < m; ++j) {
        cin >> board[i][j];
        if (board[i][j] == 'G') cgood++;
        visited[i][j] = 0;
      }
    }
    bool b = blockBad();
    int found = dfs(n - 1, m - 1);
    if (!b || found != cgood) {
      cout << "No\n";
    } else {
      cout << "Yes\n";
    }
  }
  return 0;
}
