#include <bits/stdc++.h>
using namespace std;
void FIO() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
void printarr(int arr[], int start, int size) {
  for (int i = start; i < size; i++) {
    cout << arr[i] << " ";
  }
}
void debug(int x) { cout << x << "\n"; }
long long int powMod(long long int b, int p) {
  long long int res = 1ll;
  while (p) {
    if (p & 1) {
      res = res * b % 1000000007;
    }
    b = b * b % 1000000007;
    p /= 2;
  }
  return res;
}
long long int gcd(long long int a, long long int b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
bool solve() {
  int n, m;
  cin >> n >> m;
  int gc = 0, bc = 0;
  vector<string> S;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    S.push_back(s);
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (S[i][j] == 'G') {
        gc++;
        if (i - 1 >= 0 && S[i - 1][j] == 'B') {
          return false;
        }
        if (i + 1 < n && S[i + 1][j] == 'B') {
          return false;
        }
        if (j - 1 >= 0 && S[i][j - 1] == 'B') {
          return false;
        }
        if (j + 1 < m && S[i][j + 1] == 'B') {
          return false;
        }
      }
      if (S[i][j] == 'B') {
        bc++;
        if (i - 1 >= 0 && S[i - 1][j] == '.') {
          S[i - 1][j] = '#';
        }
        if (i + 1 < n && S[i + 1][j] == '.') {
          S[i + 1][j] = '#';
        }
        if (j - 1 >= 0 && S[i][j - 1] == '.') {
          S[i][j - 1] = '#';
        }
        if (j + 1 < m && S[i][j + 1] == '.') {
          S[i][j + 1] = '#';
        }
      }
    }
  }
  if (S[n - 1][m - 1] == '#' && gc != 0) {
    return false;
  }
  int cnt = 0;
  queue<pair<int, int>> q;
  q.push({n - 1, m - 1});
  int v[n][m];
  memset(v, 0, sizeof(v));
  while (!q.empty()) {
    int x = q.front().first;
    int y = q.front().second;
    q.pop();
    v[x][y] = 1;
    if (S[x][y] == 'G') {
      cnt++;
    }
    if (x - 1 >= 0 && S[x - 1][y] != '#') {
      if (v[x - 1][y] == 0) {
        q.push({x - 1, y});
        v[x - 1][y] = 1;
      }
    }
    if (x + 1 < n && S[x + 1][y] != '#') {
      if (v[x + 1][y] == 0) {
        q.push({x + 1, y});
        v[x + 1][y] = 1;
      }
    }
    if (y - 1 >= 0 && S[x][y - 1] != '#') {
      if (v[x][y - 1] == 0) {
        q.push({x, y - 1});
        v[x][y - 1] = 1;
      }
    }
    if (y + 1 < m && S[x][y + 1] != '#') {
      if (v[x][y + 1] == 0) {
        q.push({x, y + 1});
        v[x][y + 1] = 1;
      }
    }
  }
  if (cnt == gc) {
    return true;
  } else {
    return false;
  }
}
int main() {
  FIO();
  int t;
  t = 1;
  cin >> t;
  while (t--) {
    bool res = solve();
    if (res) {
      cout << "Yes"
           << "\n";
    } else {
      cout << "No"
           << "\n";
    }
  }
  return 0;
}
