//package CodeForces;

import java.util.Scanner;
import java.util.LinkedList;
import java.util.Queue;

public class SolveTheMaze {
	
	static class node
	{
		int x;
		int y;
		node(int a,int b)
		{
			this.x=a;
			this.y=b;
		}
	}
	
	static int solve(char ch[][])
	{
		Queue<node> q=new LinkedList<node>();
		int x=ch.length-1;int y=ch[0].length-1;
		node root=new node(x,y);
		q.add(root);int count=0;
		while(!q.isEmpty())
		{
			node temp=q.remove();
			if(ch[temp.x][temp.y]=='B')
			{
				return -1;
			}
			if(ch[temp.x][temp.y]=='G')
			{
				count++;
			}
			if(temp.x-1>=0&&ch[temp.x-1][temp.y]!='#'&&ch[temp.x-1][temp.y]!='B')
			{
				node newnode=new node(temp.x-1,temp.y);
				q.add(newnode);
			}
			if(temp.y-1>=0&&ch[temp.x][temp.y-1]!='#'&&ch[temp.x][temp.y-1]!='B')
			{
				node newnode=new node(temp.x,temp.y-1);
				q.add(newnode);
			}
		}
		return count;
	}
	
	static int check(char ch[][],int i,int j,boolean vis[][],int dp[][],int n,int m)
	{
		if(i==n&&j==m)
		{
			if(ch[i][j]=='#')
			{
				return -1;
			}
			return 1;
		}
		if(i<0||j<0||i>n||j>m||ch[i][j]=='#')
		{
			return -1;
		}
		if(vis[i][j])
		{
			return -1;
		}
		vis[i][j]=true;
		if(dp[i][j]!=0)
		{
			return dp[i][j];
		}
		int xx[]= {1,0,0,-1};
		int yy[]= {0,1,-1,0};
		dp[i][j]=-1;
		for(int k=0;k<xx.length;k++)
		{
			int ans=check(ch,i+xx[k],j+yy[k],vis,dp,n,m);
			dp[i][j]=Math.max(dp[i][j],ans);
		}
		return dp[i][j];
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner s=new Scanner(System.in);
		int t=s.nextInt();
		while(t>0)
		{
			int n=s.nextInt();
			int m=s.nextInt();
			int g=0;
			char ch[][]=new char[n][m];
			for(int i=0;i<n;i++)
			{
				String str=s.next();
				for(int j=0;j<str.length();j++)
				{
					ch[i][j]=str.charAt(j);
					if(ch[i][j]=='G')
					{
						g++;
					}
				}
			}
			boolean done=true;
			for(int i=0;i<n;i++)
			{
				for(int j=0;j<m;j++)
				{
					if(ch[i][j]=='B')
					{
						if(i-1>=0&&ch[i-1][j]=='G')
						{
							done=false;
							break;
						}
						else if(i-1>=0)
						{
							ch[i-1][j]='#';
						}
						if(j-1>=0&&ch[i][j-1]=='G')
						{
							done=false;
							break;
						}
						else if(j-1>=0)
						{
							ch[i][j-1]='#';
						}
						if(i+1<n&&ch[i+1][j]=='G')
						{
							done=false;
							break;
						}
						else if(i+1<n)
						{
							ch[i+1][j]='#';
						}
						if(j+1<m&&ch[i][j+1]=='G')
						{
							done=false;
							break;
						}
						else if(j+1<m)
						{
							ch[i][j+1]='#';
						}
					}
				}
			}
			
			if(g==0)
			{
				System.out.println("Yes");
			}
			else if(ch[n-1][m-1]!='#')
			{
				int count=solve(ch);
				if(count==g)
				{
					System.out.println("Yes");
				}
				else
				{
					System.out.println("No");
				}
			}
			else
			{
				System.out.println("No");
			}
			
//			if(done)
//			{
//				int dp[][]=new int[n][m];
//				for(int i=0;i<n;i++)
//				{
//					for(int j=0;j<m;j++)
//					{
//						if(ch[i][j]=='G')
//						{
//							boolean vis[][]=new boolean[n][m];
//							int  check=check(ch,i,j,vis,dp,n-1,m-1);
//							if(check==-1)
//							{
//								done=false;
//								break;
//							}
//						}
//					}
//				}
//				
//				if(done)
//				{
//					System.out.println("Yes");
//				}
//				else
//				{
//					System.out.println("No");
//				}
//			}
//			else
//			{
//				System.out.println("No");
//			}
			t--;
		}

	}

}
