import java.io.*;
import java.util.*;
public class Main {
    static int[][] canExit;
    static int[][] vis;

    static boolean exit(StringBuilder[] map, int i, int j){
        if (i<0 || j<0 || i>=map.length || j>=map[0].length())return false;
        if (i==map.length-1 && j==map[0].length()-1 && map[i].charAt(j)!='#')return true;
        if (map[i].charAt(j)=='#')return false;
        if (canExit[i][j]==1)return true;
        if (canExit[i][j]==-1)return false;
        if (vis[i][j]==1)return false;

        vis[i][j] = 1;
        boolean ex = exit(map, i+1, j) || exit(map, i-1, j) || exit(map, i, j+1) || exit(map,i, j-1);
        if (ex)canExit[i][j]=1;
        return ex;
    }



    static void solve() throws Exception {
        int n = sc.nextInt();

        int m = sc.nextInt();
        canExit = new int[n][m];
        vis = new int[n][m];
        StringBuilder[] sb = new StringBuilder[n];

        for (int i=0;i<n;i++){
            sb[i] = new StringBuilder(sc.next());
        }

        for (int i=0;i<n;i++){
            for (int j=0;j<m;j++){
                if (sb[i].charAt(j)=='B') {
                    if (i != 0) {
                        if (sb[i - 1].charAt(j) == 'G'){
                            System.out.println("No");
                            return;
                        }
                        if (sb[i-1].charAt(j)!='B')sb[i-1].setCharAt(j, '#');
                    }
                    if (j!=0){
                        if (sb[i].charAt(j-1) =='G'){
                            System.out.println("No");
                            return;
                        }
                        if (sb[i].charAt(j-1) !='B') sb[i].setCharAt(j-1, '#');
                    }
                    if (i!=n-1){
                        if (sb[i+1].charAt(j) =='G'){
                            System.out.println("No");
                            return;
                        }
                        if (sb[i+1].charAt(j) !='B')sb[i+1].setCharAt(j, '#');
                    }
                    if (j!=m-1){
                        if (sb[i].charAt(j+1) =='G'){
                            System.out.println("No");
                            return;
                        }
                        if (sb[i].charAt(j+1) !='B')sb[i].setCharAt(j+1, '#');
                    }

                }
            }
        }

        for (int i=0;i<n;i++){
            for (int j=0;j<m;j++){
                if(sb[i].charAt(j)=='G'){
                    vis = new int[n][m];
                    if (!exit(sb, i, j)){
                        System.out.println("No");
                        return;
                    }
                }
                if(sb[i].charAt(j)=='B'){
                    if (exit(sb, i, j)){
                        System.out.println("No");
                        return;
                    }
                }
            }
        }
        System.out.println("Yes");



    }



    static PrintWriter pw;
    static MScanner sc;

    public static void main(String[] args) throws Exception {

        pw = new PrintWriter(System.out);
        sc = new MScanner(System.in);

        int tests =sc.nextInt();
        //int tests = 1;
        while (tests-- > 0){
            solve();
            pw.flush();
        }

    }

    static class MScanner {
        StringTokenizer st;
        BufferedReader br;

        public MScanner(InputStream system) {
            br = new BufferedReader(new InputStreamReader(system));
        }

        public MScanner(String file) throws Exception {
            br = new BufferedReader(new FileReader(file));
        }

        public String next() throws IOException {
            while (st == null || !st.hasMoreTokens())
                st = new StringTokenizer(br.readLine());
            return st.nextToken();
        }

        public int[] intArr(int n) throws IOException {
            int[] in = new int[n];
            for (int i = 0; i < n; i++)
                in[i] = nextInt();
            return in;
        }

        public long[] longArr(int n) throws IOException {
            long[] in = new long[n];
            for (int i = 0; i < n; i++)
                in[i] = nextLong();
            return in;
        }

        public int[] intSortedArr(int n) throws IOException {
            int[] in = new int[n];
            for (int i = 0; i < n; i++)
                in[i] = nextInt();
            shuffle(in);
            Arrays.sort(in);
            return in;
        }

        public long[] longSortedArr(int n) throws IOException {
            long[] in = new long[n];
            for (int i = 0; i < n; i++)
                in[i] = nextLong();
            shuffle(in);
            Arrays.sort(in);
            return in;
        }

        public Integer[] IntegerArr(int n) throws IOException {
            Integer[] in = new Integer[n];
            for (int i = 0; i < n; i++)
                in[i] = nextInt();
            return in;
        }

        public Long[] LongArr(int n) throws IOException {
            Long[] in = new Long[n];
            for (int i = 0; i < n; i++)
                in[i] = nextLong();
            return in;
        }

        public String nextLine() throws IOException {
            return br.readLine();
        }

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

        public double nextDouble() throws IOException {
            return Double.parseDouble(next());
        }

        public char nextChar() throws IOException {
            return next().charAt(0);
        }

        public long nextLong() throws IOException {
            return Long.parseLong(next());
        }

        public boolean ready() throws IOException {
            return br.ready();
        }

        public void waitForInput() throws InterruptedException {
            Thread.sleep(3000);
        }
    }

    static void shuffle(int[] in) {
        for (int i = 0; i < in.length; i++) {
            int idx = (int) (Math.random() * in.length);
            int tmp = in[i];
            in[i] = in[idx];
            in[idx] = tmp;
        }
    }

    static void shuffle(long[] in) {
        for (int i = 0; i < in.length; i++) {
            int idx = (int) (Math.random() * in.length);
            long tmp = in[i];
            in[i] = in[idx];
            in[idx] = tmp;
        }
    }
}
/*
 *
 * 6 3 3 1 3 5 1 3 4
 *
 * tot=5 k=3100
2 3
.#.
.B.
2 3
#G#
BB.
2 3
G.#
B#.
2 3
##.
GB.
2 3
#G.
.B.
2 3
...
B#.
2 3
#GG
...
2 3
#.B
GB.
2 3
B.G
.G.
2 3
BB#
##.
2 3
#G.
G#.
2 3
B.B
##.
2 3
BBB
GG.
2 3
BBG
##.
2 3
BB#
GB.
2 3
GG.
G#.
2 3
#.#
G#.
2 3
G..
...
2 3
GG.
.#.
2 3
B.#
B..
2 3
#GB
#G.
2 3
##G
#G.
2 3
G#B
#..
2 3
.B.
B..
2 3
.#.
#B.
2 3
G#.
B..
2 3
G#.
#B.
2 3
G..
#B.
2 3
.B#
GG.
2 3
G##
#B.
2 3
#G#
G#.
2 3
.B#
#..
2 3
GBG
#G.
2 3
BGB
#...
 */
