#include <bits/stdc++.h>
using namespace std;
const int N = 1e6;
long long int modd = 998244353;
vector<bool> isprime(N + 1, true);
void seive() {
  isprime[0] = false;
  isprime[1] = false;
  for (int i = 2; i * i <= 1e6; i++) {
    if (isprime[i]) {
      for (int j = i * i; j <= 1e6; j += i) {
        isprime[j] = false;
      }
    }
  }
}
int findfrnd(bitset<32> x, bitset<32> y, int q) {
  int p = 0;
  for (int i = 0; i < 32; i++) {
    if (x[i] != y[i]) {
      p++;
      if (p > q) return 0;
    }
  }
  return 1;
}
long long int moduleinverse(long long int x) {
  long long int res = 1;
  long long int y = 1000000007 - 2;
  x = x % 1000000007;
  while (y > 0) {
    if (y & 1) res = (res * x) % 1000000007;
    y /= 2;
    x = (x * x) % 1000000007;
  }
  return res;
}
long long int dp[1000002];
void fact() {
  dp[0] = 1;
  for (int i = 1; i < 1000001; i++) {
    dp[i] = (dp[i - 1] * i) % 1000000007;
  }
}
char minchar(char char1, char char2) {
  if (char1 >= char2) return char1;
  return char2;
}
long long int highpower(long long int x, long long int pow) {
  if (pow == 0) return 1;
  long long int res = (highpower(x, pow / 2));
  res %= modd;
  res *= res;
  res %= modd;
  if (pow % 2) {
    res *= x;
    res %= modd;
  }
  return res;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  seive();
  cout << fixed << setprecision(10);
  int test;
  cin >> test;
  while (test--) {
    long long int n, m;
    cin >> n >> m;
    char a[n + 1][m + 1];
    for (long long int i = 1; i <= n; i++) {
      for (long long int j = 1; j <= m; j++) {
        cin >> a[i][j];
      }
    }
    for (long long int i = 1; i <= n; i++) {
      for (long long int j = 1; j <= m; j++) {
        if (a[i][j] == 'B') {
          if (a[i - 1][j] == '.' && i != 1) a[i - 1][j] = '#';
          if (a[i + 1][j] == '.' && i != n) a[i + 1][j] = '#';
          if (a[i][j - 1] == '.' && j != 1) a[i][j - 1] = '#';
          if (a[i][j + 1] == '.' && j != m) a[i][j + 1] = '#';
        }
      }
    }
    queue<pair<long long int, long long int> > que;
    int visited[n + 5][m + 5];
    for (long long int i = 0; i <= n; i++) {
      for (long long int j = 0; j <= m; j++) visited[i][j] = 0;
    }
    if (a[n][m] == '.') {
      que.push({n, m});
      visited[n][m] = 1;
    }
    while (que.empty() == false) {
      pair<int, int> p = que.front();
      que.pop();
      int x = p.first;
      int y = p.second;
      if (a[x - 1][y] != '#' && x - 1 >= 1 && visited[x - 1][y] == 0) {
        que.push({x - 1, y});
        visited[x - 1][y] = 1;
      }
      if (a[x + 1][y] != '#' && x + 1 <= n && visited[x + 1][y] == 0) {
        que.push({x + 1, y});
        visited[x + 1][y] = 1;
      }
      if (a[x][y - 1] != '#' && y - 1 >= 1 && visited[x][y - 1] == 0) {
        visited[x][y - 1] = 1;
        que.push({x, y - 1});
      }
      if (a[x][y + 1] != '#' && y + 1 <= m && visited[x][y + 1] == 0) {
        visited[x][y + 1] = 1;
        que.push({x, y + 1});
      }
    }
    int possible = 1;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        if (a[i][j] == 'G' && !visited[i][j]) possible = 0;
        if (a[i][j] == 'B' && visited[i][j]) possible = 0;
      }
    }
    if (possible)
      cout << "YES";
    else
      cout << "NO";
    cout << endl;
  }
  return 0;
}
