import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class D {

	static final int[][] dir = {{0,1},{0,-1},{1,0},{-1,0}};
	public static void main(String[] args) {
		FastScanner sc = new FastScanner();
		int T = sc.nextInt();
		while(T-- > 0) {
			int n = sc.nextInt();
			int m = sc.nextInt();
			char[][] map = new char[n][m];
			boolean nogoods = true;
			for(int i = 0; i < n; i++) {
				map[i] = sc.next().toCharArray();
				for(int j = 0; j < m; j++) if(map[i][j] == 'G') nogoods = false;
			}
			if(nogoods) {
				if(map[n-1][m-1] == 'B') {
					System.out.println("No");
				}
				else {
					System.out.println("Yes");
				}
				continue;
			}
			boolean impossible = false;
			LinkedList<Pair> q = new LinkedList<>();
			for(int i = 0; i < n; i++) {
				for(int j = 0; j < m; j++) {
					if(map[i][j] == 'B') {
						for(int[] d: dir) {
							int x = i+d[0], y = j+d[1];
							if(x >= 0 && x < n && y >= 0 && y < m) {
								if(map[x][y] == 'G') {
									impossible = true;
								}
								else if(map[x][y] == '.') {
									map[x][y] = '#';
								}
							}
						}
					}
//					else if(map[i][j] == 'g') q.add(new Pair(i, j));
				}
			}
			if(map[n-1][m-1] == '#') impossible = true;
			if(!impossible) {
				q.add(new Pair(n-1, m-1));
				boolean[][] seen = new boolean[n][m];
				while(!q.isEmpty()) {
					Pair p = q.removeFirst();
					for(int[] d: dir) {
						int x = p.x+d[0], y = p.y+d[1];
						if(x >= 0 && x < n && y >= 0 && y < m) {
							if(!seen[x][y]) {
								if(map[x][y] == '.' || map[x][y] == 'G') {
									seen[x][y] = true;
									q.add(new Pair(x, y));
								}
							}
						}
					}
				}
				for(int i = 0; i < n; i++) {
					for(int j = 0; j < m; j++) {
						if(map[i][j] == 'G' && !seen[i][j]) {
							impossible = true;
						}
					}
				}
			}
			if(impossible) {
				System.out.println("No");
			}
			else {
				System.out.println("Yes");
			}
		}

	}
	static class Pair{
		int x, y;
		public Pair(int x, int y) {
			this.x = x; this.y = y;
		}
	}
	static class FastScanner {
        public BufferedReader reader;
        public StringTokenizer tokenizer;
        public FastScanner() {
            reader = new BufferedReader(new InputStreamReader(System.in), 32768);
            tokenizer = null;
        }
        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }
        public int nextInt() {
            return Integer.parseInt(next());
        }
        public long nextLong() {
        	return Long.parseLong(next());
        }
        public double nextDouble() {
        	return Double.parseDouble(next());
        }
        public String nextLine() {
        	try {
        		return reader.readLine();
        	} catch(IOException e) {
        		throw new RuntimeException(e);
        	}
        }
    }

}
