import java.io.*;
import java.util.*;

public class maze {

	public static void main(String[] args) throws IOException {
		BufferedReader f = new BufferedReader(new InputStreamReader(System.in));
		int t = Integer.parseInt(f.readLine());
		for (int i = 0; i < t; i++) {
			StringTokenizer st = new StringTokenizer(f.readLine());
			int n = Integer.parseInt(st.nextToken());
			int m = Integer.parseInt(st.nextToken());
			int good=0;
			char[][] grid = new char[n][m];
			for (int j = 0; j < n; j++) {
				String s = f.readLine();
				for (int k = 0; k < m; k++) {
					grid[j][k] = s.charAt(k);
					if(grid[j][k]=='G') {
						good++;
					}
				}
			}
			if(solve(grid,n,m,good)) {
				System.out.println("Yes");
			}
			else {
				System.out.println("No");
			}
		}
	}

	public static boolean solve(char[][] grid, int n, int m,int g) {
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				if (grid[i][j] == 'B') {
					if (i > 0) {
						if (grid[i - 1][j] == 'G') {
							return false;
						}
					}
					if (j > 0) {
						if (grid[i][j - 1] == 'G') {
							return false;
						}
					}
					if (i < n - 1) {
						if (grid[i + 1][j] == 'G') {
							return false;
						}
					}
					if (j < m - 1) {
						if (grid[i][j + 1] == 'G') {
							return false;
						}
					}
					fill(grid,i,j,n,m);	
				}
			}
		}
		int[] good= {0};
		boolean[][] visited=new boolean[n][m];
		dfs(grid,n-1,m-1,visited,good);
		if(good[0]==g) {
			return true;
		}
		return false;
	}
	public static void dfs(char[][] grid,int i,int j,boolean[][] visited,int[] good) {
		if(visited[i][j]) {
			return;
		}
		if(grid[i][j]=='#') {
			return;
		}
		visited[i][j]=true;
		if(grid[i][j]=='G') {
			good[0]++;
		}
		if(i>0) {
			if(grid[i-1][j]!='#') {
				dfs(grid,i-1,j,visited,good);
			}
		}
		if(j>0) {
			if(grid[i][j-1]!='#') {
				dfs(grid,i,j-1,visited,good);
			}
		}
		if(i<grid.length-1) {
			if(grid[i+1][j]!='#') {
				dfs(grid,i+1,j,visited,good);
			}
		}
		if(j<grid[0].length-1) {
			if(grid[i][j+1]!='#') {
				dfs(grid,i,j+1,visited,good);
			}
		}
	}
	public static void fill(char[][] grid,int i,int j,int n,int m) {
		if(i>0) {
			if(grid[i-1][j]!='B') {
				grid[i-1][j]='#';
			}
		}
		if(j>0) {
			if(grid[i][j-1]!='B') {
				grid[i][j-1]='#';
			}
		}
		if(i<n-1) {
			if(grid[i+1][j]!='B') {
				grid[i+1][j]='#';
			}
		}
		if(j<m-1) {
			if(grid[i][j+1]!='B') {
				grid[i][j+1]='#';
			}
		}
	}
}
	