import java.io.*;
import java.util.StringTokenizer;
// نورت الكود يا كبير اتفضل

// يا رب Accepted
public class SolveTheMaze {
    private static final int[] dx = {1, -1, 0, 0};
    private static final int[] dy = {0, 0, 1, -1};
    private static char[][] grid;
    private static boolean[][] visited;
    private static int doog = 0;
    private static int n;
    private static int m;

    private static boolean DFS(int i, int j) {
        if (i >= n || j >= m || i < 0 || j < 0 || visited[i][j] || grid[i][j] == '#')
            return true;

        if (grid[i][j] == 'B')
            return false;

        if (grid[i][j] == 'G')
            doog++;

        visited[i][j] = true;

        return DFS(i + 1, j) && DFS(i, j + 1) && DFS(i - 1, j) && DFS(i, j - 1);
    }

    private static void block(int x, int y) {
        for (int i = 0; i < 4; i++) {
            int xx = x + dx[i];
            int yy = y + dy[i];
            if (xx < n && yy < m && xx > -1 && yy > -1 && grid[xx][yy] == '.')
                grid[xx][yy] = '#';
        }
    }

    public static void main(String[] args) {
        FastReader in = new FastReader();
        PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));

        int t = in.nextInt();
        while (t-- > 0) {
            n = in.nextInt();
            m = in.nextInt();
            int good = 0;
            doog = 0;
            grid = new char[n][m];
            visited = new boolean[n][m];
            for (int i = 0; i < n; i++)
                grid[i] = in.nextLine().toCharArray();

            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    if (grid[i][j] == 'G')
                        good++;
                    if (grid[i][j] == 'B')
                        block(i, j);
                }
            }

//            for (int i = 0; i < n; i++) {
//                for (int j = 0; j < m; j++) {
//                    out.print(grid[i][j]);
//                }
//                out.println();
//            }
//            DFS(n - 1, m - 1);
//            out.println(good + " " + doog);

            out.println((DFS(n - 1, m - 1) && good == doog) ? "YES" : "NO");
        }
        out.close();
    }

    private static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        FastReader() {
            br = new BufferedReader(new
                    InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }


        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }
}