import java.io.*;
import java.util.*;
public class cp1 {
	static int n, m;
	static boolean visited[][];
	static int ctrG, ctrB;
	static void traverse(char s[][], int i, int j, int n, int m){
		if(i<0 || j<0 || i>n-1 || j>m-1 || s[i][j]=='#' || visited[i][j])
			return;

		visited[i][j]=true;
		if(s[i][j]=='G')
			ctrG++;
		if(s[i][j]=='B')
			ctrB++;
		traverse(s, i-1, j, n, m);
		traverse(s, i, j-1, n, m);
		traverse(s, i+1, j, n, m);
		traverse(s, i, j+1, n, m);

	}
	public static void main(String args[]) {
		int t=II();
		while(--t>=0){
			n=II();
			m=II();

			char s[][]=new char[n][m];
			visited=new boolean[n][m];

			for(int i=0;i<n;i++){
				s[i]=IS().toCharArray();
			}
			ctrB=0;ctrG=0;
			int countG=0, countB=0;
			for(int i=0;i<n;i++){
				for(int j=0;j<m;j++){
					if(s[i][j]=='G')
						countG++;
					if(s[i][j]=='B')
						countB++;
				}
			}
			boolean flag=true;
			rows: for(int i=0;i<n;i++){
				for(int j=0;j<m;j++){
					if(s[i][j]=='B'){
						if(i>0){
							if(s[i-1][j]=='G'){
								flag=false;
								break rows;
							}
							if(s[i-1][j]=='.')
								s[i-1][j]='#';
						}
						if(i<n-1){
							if(s[i+1][j]=='G'){
								flag=false;
								break rows;
							}
							if(s[i+1][j]=='.')
								s[i+1][j]='#';
						}
						if(j>0){
							if(s[i][j-1]=='G'){
								flag=false;
								break rows;
							}
							if(s[i][j-1]=='.')
								s[i][j-1]='#';
						}
						if(j<m-1){
							if(s[i][j+1]=='G'){
								flag=false;
								break rows;
							}
							if(s[i][j+1]=='.')
								s[i][j+1]='#';
						}
					}
				}
			}
			// visited[n-1][m-1]=true;
			traverse(s, n-1, m-1, n, m);

			// for(int i=0;i<n;i++){
			// 	for(int j=0;j<m;j++)
			// 		System.out.print(s[i][j]+" ");
			// 	System.out.println();
			// }

			// System.out.println(countG);
			// System.out.println(countB);
			// System.out.println(ctrG);
			// System.out.println(ctrB);

			if(ctrG!=countG || ctrB>0)
				flag=false;

			if(flag)
				System.out.println("Yes");
			else
				System.out.println("No");
		}
	}
	
	static scan in=new scan(System.in);
	static int II() {
		return in.nextInt();
	}
	static long IL() {
		return in.nextLong();
	}
	static int[] IIA(int n) {
		int a[]=new int[n];
		for(int i=0;i<n;i++) {
			a[i]=II();
		}
		return a;
	}
	static String IS() {
		return in.next();
	}
	static char IC(){
		return in.next().charAt(0);
	}
	static String[] ISA(int n) {
		String a[]=new String[n];
		for(int i=0;i<n;i++) {
			a[i]=IS();
		}
		return a;
	}
	static char[] ICA(int n) {
		char a[]=new char[n];
		for(int i=0;i<n;i++) {
			a[i]=IC();
		}
		return a;
	}
}
class scan
{
    public static BufferedReader reader;
    public static StringTokenizer token;

    scan(InputStream str)
    {
        reader=new BufferedReader(new InputStreamReader(str));
        token=null;
    }

    static int nextInt()
    {
        while(token==null||!token.hasMoreTokens())
        {
            try { token=new StringTokenizer(reader.readLine());   }
            catch(IOException e){  throw new RuntimeException(e); }
        }
        return Integer.parseInt(token.nextToken());
    }

    static long nextLong()
    {
        while(token==null||!token.hasMoreTokens())
        {
            try { token=new StringTokenizer(reader.readLine());   }
            catch(IOException e){  throw new RuntimeException(e); }
        }
        return Long.parseLong(token.nextToken());
    }

    static String next()
    {
        while(token==null||!token.hasMoreTokens())
        {
            try { token=new StringTokenizer(reader.readLine());   }
            catch(IOException e){  throw new RuntimeException(e); }
        }
        return token.nextToken();
    }

}