import java.util.*;

public class D{
	
	
	static void test(){
		// System.out.println("4 = " + findPos(4,arr));
		// System.out.println("2 = " + findPos(2,arr));
		// System.out.println("1 = " + findPos(1,arr));		
		// System.out.println("0 = " + findPos(0,arr));		
		// System.out.println("6 = " + findPos(6,arr));		
		// System.out.println("3 = " + findPos(3,arr));		
	}
	static class Pair{
		int x;
		int y;
		Pair(int x, int y){
			this.x = x;
			this.y = y;
		}
	}
	static boolean block(char[][]maze, int i, int j){
		for(int k = -1;k<=1;k+=2){
			if(maze[i+k][j] == 'G')
				return false;
			if(maze[i+k][j] == '.')
				maze[i+k][j] = '#';
			if(maze[i][j+k] == 'G')
				return false;
			if(maze[i][j+k] == '.')
				maze[i][j+k] = '#';
			
		}
		return true;
	}
	static void print(char[][] maze, int n,int m){
		for(int i = 0;i<=n+1;++i){
			for(int j = 0;j<=m+1;++j){
				System.out.print(maze[i][j]);
			}
			System.out.println();
		}
	}
	public static void alg(){
		Scanner in = new Scanner(System.in);
		StringBuilder str = new StringBuilder();
		int t = in.nextInt();
		u : for(int o = 0;o<t;++o){
			int n = in.nextInt();
			int m = in.nextInt();
			char[][] maze = new char[n+2][m+2];
			for(int i = 0;i<m+2;++i){
				maze[0][i] = '#';
				maze[n+1][i] = '#';
			}
			for(int i = 0;i<n+1;++i){
				maze[i][0] = '#';
				maze[i][m+1] = '#';
			}
			int goodCount = 0;
			for(int i = 1;i<=n;++i){
				String s = in.next();
				for(int j = 1;j<=m;++j){
					maze[i][j] = s.charAt(j-1);
					if(maze[i][j] == 'G')
						goodCount++;
				}
			}
			// print(maze,n,m);
			for(int i = 1;i<=n;++i){
				for(int j = 1;j<=m;++j){
					if(maze[i][j] == 'B'){
						if(block(maze,i,j) == false){
							str.append("No\n");
							continue u;
						}
					}
				}
			}
			// print(maze,n,m);
			if(maze[n][m] == '#' && goodCount != 0){
				str.append("No\n");
				continue u;
			}
			LinkedList<Pair> queue= new LinkedList<>();
			queue.add(new Pair(n,m));
			while(!queue.isEmpty()){
				Pair cur = queue.pop();
				int i = cur.x;
				int j = cur.y;
				for(int k = -1;k<=1;k+=2){
					if(maze[i+k][j] == 'G'){
						maze[i+k][j] = '#';
						goodCount--;
						queue.add(new Pair(i+k,j));
					}
					if(maze[i][j+k] == 'G'){
						maze[i][j+k] = '#';
						goodCount--;
						queue.add(new Pair(i,j+k));
					}
					if(maze[i+k][j] == '.'){
						maze[i+k][j] = '#';
						queue.add(new Pair(i+k,j));
					}
					if(maze[i][j+k] == '.'){
						maze[i][j+k] = '#';
						queue.add(new Pair(i,j+k));
					}
					
				}
			}
			str.append((goodCount == 0 ? "Yes" : "No") + "\n");
			
		}
		System.out.println(str.toString());
		
			
	}
	public static void main(String[] args){
		// test();
		alg();
	}
}