#include <bits/stdc++.h>
using namespace std;
bool diff_neigh(char c1, char c2) {
  return (((c1 == 'G') && (c2 == 'B')) || ((c1 == 'B') && (c2 == 'G')));
}
int main() {
  cout.precision(17);
  long long modd = 1000 * 1000 * 1000 + 7;
  mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  uniform_int_distribution<int> rand_gen(0, modd);
  long long infinit = 10000000000000000;
  int test_cases;
  cin >> test_cases;
  for (int t = (1); t < (1) + (test_cases); ++t) {
    int n;
    cin >> n;
    int m;
    cin >> m;
    vector<string> grid;
    int no_good = 0, no_bad = 0;
    for (int i = (0); i < (0) + (n); ++i) {
      string s;
      cin >> s;
      grid.push_back(s);
      no_good += count(s.begin(), s.end(), 'G');
      no_bad += count(s.begin(), s.end(), 'B');
    }
    if (no_good == 0) {
      cout << "Yes" << endl;
      continue;
    }
    bool gb_neighbours = false;
    for (int i = (0); i < (0) + (n); ++i) {
      for (int j = (0); j < (0) + (m); ++j) {
        if (i > 0) {
          gb_neighbours = diff_neigh(grid[i][j], grid[i - 1][j]);
        }
        if (gb_neighbours) {
          break;
        }
        if (i < n - 1) {
          gb_neighbours = diff_neigh(grid[i][j], grid[i + 1][j]);
        }
        if (gb_neighbours) {
          break;
        }
        if (j > 0) {
          gb_neighbours = diff_neigh(grid[i][j], grid[i][j - 1]);
        }
        if (gb_neighbours) {
          break;
        }
        if (j < m - 1) {
          gb_neighbours = diff_neigh(grid[i][j], grid[i][j + 1]);
        }
        if (gb_neighbours) {
          break;
        }
      }
      if (gb_neighbours) {
        break;
      }
    }
    if (gb_neighbours) {
      cout << "No" << endl;
      continue;
    }
    for (int i = (0); i < (0) + (n); ++i) {
      for (int j = (0); j < (0) + (m); ++j) {
        if (grid[i][j] == 'B') {
          if (i > 0) {
            if (grid[i - 1][j] != 'B') {
              grid[i - 1][j] = '#';
            }
          }
          if (i < n - 1) {
            if (grid[i + 1][j] != 'B') {
              grid[i + 1][j] = '#';
            }
          }
          if (j > 0) {
            if (grid[i][j - 1] != 'B') {
              grid[i][j - 1] = '#';
            }
          }
          if (j < m - 1) {
            if (grid[i][j + 1] != 'B') {
              grid[i][j + 1] = '#';
            }
          }
        }
      }
    }
    if (grid[n - 1][m - 1] == '#') {
      cout << "No" << endl;
      continue;
    }
    stack<pair<int, int>> todo;
    vector<vector<bool>> visited(n, vector<bool>(m, false));
    todo.push(make_pair(n - 1, m - 1));
    pair<int, int> current;
    int count_good_people = 0;
    while (!todo.empty()) {
      current = todo.top();
      todo.pop();
      if (!visited[current.first][current.second]) {
        count_good_people += (grid[current.first][current.second] == 'G');
        visited[current.first][current.second] = true;
        int i = current.first, j = current.second;
        if (i > 0) {
          if (grid[i - 1][j] != '#') {
            todo.push(make_pair(i - 1, j));
          }
        }
        if (i < n - 1) {
          if (grid[i + 1][j] != '#') {
            todo.push(make_pair(i + 1, j));
          }
        }
        if (j > 0) {
          if (grid[i][j - 1] != '#') {
            todo.push(make_pair(i, j - 1));
          }
        }
        if (j < m - 1) {
          if (grid[i][j + 1] != '#') {
            todo.push(make_pair(i, j + 1));
          }
        }
      }
    }
    if (count_good_people == no_good) {
      cout << "Yes" << endl;
      continue;
    } else {
      cout << "No" << endl;
      continue;
    }
  }
  return 0;
}
