import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.Map;
import java.util.Queue;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.Stack;
import java.util.TreeMap;

public class Main {
	
	public static void main(String[] args) throws IOException {
		String[] input;
		PrintWriter out = new PrintWriter(System.out);
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		Scanner s = new Scanner(System.in);
		int t = s.nextInt();
		while(t-->0) {
			int n = s.nextInt(), m = s.nextInt();
			String[] str = new String[n];
			boolean[][] visited = new boolean[n][m];
			Queue<Integer> queue = new LinkedList<Integer>();
			int cb = 0, cg = 0;
			char[][] arr = new char[n][m];
			for(int i = 0; i < n; i++) {
				str[i] = s.next();
				arr[i] = str[i].toCharArray();
				for(int j = 0; j < m; j++) {
					if(str[i].charAt(j) == 'B') {
						cb++;
					} else if(str[i].charAt(j) == 'G') {
						cg++;
					}
				}
			}
			if(cg == 0) {
				out.println("Yes");
				continue;
			}
			queue.add(n - 1);
			queue.add(m - 1);
			visited[n - 1][m - 1] = true;
			int[] dx = {-1, 0, 1, 0};
			int[] dy = {0, -1, 0, 1};
			ArrayList<Integer> points = new ArrayList<Integer>();
			while(queue.size() > 0) {
				int x = queue.remove(), y = queue.remove();
				if(str[x].charAt(y) == 'B') {
					points.add(x);
					points.add(y);
				}
				for(int i = 0; i < 4; i++) {
					int X = x  + dx[i];
					int Y = y + dy[i];
					if(X < 0 || Y < 0 || X >= n || Y >= m || visited[X][Y] || str[X].charAt(Y) == '#') {
						continue;
					}
					queue.add(X);
					queue.add(Y);
					visited[X][Y] = true;
				}
			}
			queue.clear();
			boolean possible = true;
			for(int idx = 0; idx < points.size(); idx += 2){
				int i = points.get(idx), j = points.get(idx + 1);
				{
					if(true) {
						for(int k = 0; k < 4; k++) {
							int X = i  + dx[k];
							int Y = j + dy[k];
							if(X < 0 || Y < 0 || X >= n || Y >= m || str[X].charAt(Y) == '#') {
								continue;
							}
							if(str[X].charAt(Y) == 'G') {
								possible = false;
								continue;
							}
							arr[X][Y] = '#';
						}
					} 
					arr[i][j] = '#';
				}
			}
			if(arr[n - 1][m - 1] == '#') {
				possible = false;
			}
			queue.add(n - 1);
			visited = new boolean[n][m];
			visited[n - 1][m - 1] = true;
			queue.add(m - 1);
			while(queue.size() > 0) {
				int x = queue.remove(), y = queue.remove();
				if(arr[x][y] == 'G') {
					cg--;
				}
				for(int i = 0; i < 4; i++) {
					int X = x  + dx[i];
					int Y = y + dy[i];
					if(X < 0 || Y < 0 || X >= n || Y >= m || visited[X][Y] || arr[x][y] == '#') {
						continue;
					}
					queue.add(X);
					queue.add(Y);
					visited[X][Y] = true;
				}
			}
			out.println((possible && cg == 0) ? "Yes" : "No");
		}
		out.flush();
	}

}
