import java.io.*;
import java.util.*;

public class Solution {
    public static void printMat(int[][] mat) {
        for (int i = 0; i < mat.length; ++i) {
            for (int j = 0; j < mat[i].length; ++j) {
                System.out.print(mat[i][j] + " ");
            }
            System.out.println("");
        }
    }

    public static boolean valid(int i, int j, int n, int m) {
        if (0 <= i && i < n && 0 <= j && j < m) return true;
        return false;
    }

    public static boolean possible(char[][] mat, int n, int m) {
        int[][] dir = {
            {1, 0},
            {-1, 0},
            {0, 1},
            {0, -1}
        };
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                if (mat[i][j] == 'B') {
                    for (int k = 0; k < dir.length; k++) {
                        int di = i + dir[k][0];
                        int dj = j + dir[k][1];
                        if (valid(di, dj, n, m)) {
                            if (mat[di][dj] == 'G') return false;
                            if (mat[di][dj] != 'B') mat[di][dj] = '#';
                        }
                    }
                }
            }
        }
        boolean[][] visited = new boolean[n][m];
        Queue<int[]> que = new LinkedList<>();
        if (mat[n - 1][m - 1] == '.') {
            que.add(new int[]{n - 1, m - 1});
            visited[n - 1][m - 1] = true;
        }
        while (!que.isEmpty()) {
            int[] curr = que.poll();
            for (int k = 0; k < dir.length; ++k) {
                int di = curr[0] + dir[k][0];
                int dj = curr[1] + dir[k][1];
                if (valid(di, dj, n, m) && !visited[di][dj] && mat[di][dj] != '#') {
                    que.add(new int[]{di, dj});
                    visited[di][dj] = true;
                }
            }
        }
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                if (mat[i][j] == 'G' && !visited[i][j]) return false;
            }
        }
        return true;
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        StringBuilder answer = new StringBuilder();
        for (int t = 0; t < T; ++t) {
            StringTokenizer sts = new StringTokenizer(br.readLine());
            int n = Integer.parseInt(sts.nextToken());
            int m = Integer.parseInt(sts.nextToken());
            char[][] mat = new char[n][m];
            for (int i = 0; i < n; ++i) {
                String row = br.readLine();
                for (int j = 0; j < row.length(); ++j) {
                    mat[i][j] = row.charAt(j);
                }
            }
            boolean res = possible(mat, n, m);
            if (res) {
                answer.append("Yes\n");
            } else {
                answer.append("No\n");
            }
        }
        System.out.println(answer);
    }
}