import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;



public class main {
	static char[][] a;
	static boolean[][] visited;
	static int G;
	static int B;
	/*public static void bfs(int v)
	{
		Queue<Integer> queue= new LinkedList<Integer>();
		queue.add(v);
		visited[v]=true;
		while(!queue.isEmpty())
		{
			int v2=queue.poll();
			for (int i = 0; i < adj[v2].size(); i++) {
				if(!visited[adj[v2].get(i)])
				{
					visited[adj[v2].get(i)]=true;
					queue.add(adj[v2].get(i));
				}
			}
			System.out.println("Visited: " + Arrays.toString(visited));
			System.out.println("Queue: " + queue);
			System.out.println("Printed value: " + v2);
		}
	}*/
	public static boolean blockBad(int x, int y)
	{
		visited[x][y]=true;
		if(a[x][y]=='B')
		{
			return true;
		}
		boolean flag=false;
		if((x-1>-1 && x-1<a.length && y>-1 && y<a[x-1].length)&& a[x-1][y]!='#'&&(!visited[x-1][y]||a[x-1][y]=='B'))
		flag|=blockBad(x-1,y);
		if((x+1>-1 && x+1<a.length && y>-1 && y<a[x+1].length)&& a[x+1][y]!='#'  && (!visited[x+1][y]||a[x+1][y]=='B'))
		flag|=blockBad(x+1,y);
		if((x>-1 && x<a.length && y-1>-1 && y-1<a[x].length)&& a[x][y-1]!='#'&& (!visited[x][y-1]||a[x][y-1]=='B'))
		flag|=blockBad(x,y-1);
		if((x>-1 && x<a.length && y+1>-1 && y+1<a[x].length)&& a[x][y+1]!='#'  && (!visited[x][y+1]||a[x][y+1]=='B'))
		flag|=blockBad(x,y+1);
		if(a[x][y]=='.' && flag)
		{
			a[x][y]='#';
			flag=false;
		}
		return flag;
	}
	public static void saveGood(int x, int y)
	{
		visited[x][y]=true;
		if(a[x][y]=='G')
		{
			G++;
		}
		else if(a[x][y]=='B')
		{
			B++;
		}
		if((x-1>-1 && x-1<a.length && y>-1 && y<a[x-1].length)&& a[x-1][y]!='#'&&!visited[x-1][y])
		saveGood(x-1,y);
		if((x+1>-1 && x+1<a.length && y>-1 && y<a[x+1].length)&& a[x+1][y]!='#'  &&!visited[x+1][y])
		saveGood(x+1,y);
		if((x>-1 && x<a.length && y-1>-1 && y-1<a[x].length)&& a[x][y-1]!='#'&&!visited[x][y-1])
		saveGood(x,y-1);
		if((x>-1 && x<a.length && y+1>-1 && y+1<a[x].length)&& a[x][y+1]!='#'  &&!visited[x][y+1])
		saveGood(x,y+1);
	}
	public static void main(String[] args) throws NumberFormatException, IOException
	{
		BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
		PrintWriter pw= new PrintWriter(System.out);
		int t=Integer.parseInt(br.readLine());
		for (int i = 0; i < t; i++) {
			G=0;
			B=0;
			StringTokenizer st =new StringTokenizer(br.readLine());
			int x=Integer.parseInt(st.nextToken());
			int y=Integer.parseInt(st.nextToken());
			a= new char[x][y];
			int good=0;
			for (int j = 0; j < x; j++) {
				String s= br.readLine();
				for (int k = 0; k < y; k++) {
					a[j][k]=s.charAt(k);
					if(a[j][k]=='G')
					{
						good++;
					}
				}
			}
			visited= new boolean[x][y];
			if(a[x-1][y-1]!='#')
			blockBad(x-1, y-1);
			visited= new boolean[x][y];
			if(a[x-1][y-1]!='#')
			saveGood(x-1, y-1);
			if(G==good && B==0)
			{
				pw.println("Yes");
			}
			else
			{
				pw.println("No");
			}
		}
		pw.close();
	}
	static class Pair
	{
		int x;
		int y;
		public Pair(int x, int y) {
			this.x=x;
			this.y=y;
		}
		public String toString()
		{
			return "(" + x + ","+ y + ")";
		}
	}
}
