import java.util.*;
import java.io.*;
public class Main{
    static int n,m;
    static int x[]={1,0,0,-1};
    static int y[]={0,1,-1,0};
    public static boolean valid(int i,int j){
        if(i>=0&&i<n&&j>=0&&j<m)return true;
        return false;
    }
    static class Node{
        int i,j;
        public Node(int i,int j){
            this.i=i;
            this.j=j;
        }
    }
	public static void main(String args[]){
		Scanner sc=new Scanner(System.in);
		int tc=sc.nextInt();
		while(tc-->0){
		    n=sc.nextInt();
		    m=sc.nextInt();
		    char a[][]=new char[n][m];
		    for(int i=0;i<n;i++){
		        String s=sc.next();
		        for(int j=0;j<m;j++){
		            a[i][j]=s.charAt(j);
		        }
		    }
		    for(int i=0;i<n;i++){
		        for(int j=0;j<m;j++){
		            if(a[i][j]=='B'){
		                for(int k=0;k<4;k++){
		                    int ni=i+x[k];
		                    int nj=j+y[k];
		                    if(valid(ni,nj)&&a[ni][nj]=='.')a[ni][nj]='#';
		                }
		            }
		        }
		    }
		    boolean vis[][]=new boolean[n][m];
		    Queue<Node> q=new LinkedList<Node>();
		    if(a[n-1][m-1]=='.'){
    		    q.add(new Node(n-1,m-1));
    		    vis[n-1][m-1]=true;
		    }
		    while(!q.isEmpty()){
		        Node tmp=q.remove();
		        int i=tmp.i;
		        int j=tmp.j;
		        for(int k=0;k<4;k++){
		            int ni=i+x[k];
		            int nj=j+y[k];
		            if(valid(ni,nj)&&!vis[ni][nj]&&a[ni][nj]!='#'){
		                q.add(new Node(ni,nj));
		                vis[ni][nj]=true;
		            }
		        }
		    }
		    boolean good=true;
		    for(int i=0;i<n;i++){
		        for(int j=0;j<m;j++){
		            if((a[i][j]=='B'&&vis[i][j])||(a[i][j]=='G'&&!vis[i][j])){
		                good=false;
		                break;
		            }
		        }
		    }
		    if(good)System.out.println("Yes");
		    else System.out.println("No");
		}
	}
}