import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;

public class D {
    static HashMap<Long, Long> combos = new HashMap<>();
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        PrintStream out = System.out;

        int t = Integer.parseInt(br.readLine());

        for (int i = 0; i < t; i++) {
            String[] nm = br.readLine().split(" ");
            int rows = Integer.parseInt(nm[0]);
            int cols = Integer.parseInt(nm[1]);
            char[][] map = new char[rows][cols];
            for (int row = 0; row < rows; row++) {
                nm = br.readLine().split("");
                for (int col = 0; col < cols; col++) {
                    map[row][col] += nm[col].charAt(0);
                }
            }

            if (removeBaddies(rows, cols, map)) {
                out.println("No");
                continue;
            }

            boolean[][] works = new boolean[rows][cols];
            fillPath(works, map, rows, cols, rows-1, cols-1);
            boolean success = true;
            for (int row = 0; row < rows && success; row++) {
                for (int col = 0; col < cols && success; col++) {
                    if (map[row][col] == 'G' && !works[row][col]) success = false;
                }
            }
            if (success) out.println("Yes");
            else out.println("No");
        }



        System.out.flush();
    }
    private static boolean  removeBaddies(int rows, int cols, char[][] map) {
        for (int row = 0; row < rows; row++) {
            for (int col = 0; col < cols; col++) {
                if (map[row][col] == 'B') {
                    if (row > 0) {
                        if (map[row-1][col] == 'G') return true;
                        map[row-1][col] = '#';
                    }
                    if (col > 0) {
                        if (map[row][col-1] == 'G') return true;
                        map[row][col-1] = '#';
                    }
                    if (row < rows-1) {
                        if (map[row+1][col] == 'G') return true;
                        map[row+1][col] = '#';
                    }
                    if (col < cols-1) {
                        if (map[row][col+1] == 'G') return true;
                        map[row][col+1] = '#';
                    }
                }
            }
        }
        return false;
    }
    private static void fillPath(boolean[][] works, char[][] map, int rows, int cols, int y, int x) {
        if (y < 0 || x < 0 || y == rows || x == cols || map[y][x] == '#' || works[y][x]) return;
        works[y][x] = true;
        fillPath(works, map, rows, cols, y-1, x);
        fillPath(works, map, rows, cols, y, x-1);
        fillPath(works, map, rows, cols, y+1, x);
        fillPath(works, map, rows, cols, y, x+1);
    }
}