import math 
import sys

sys.setrecursionlimit(10**4) 

def Divisors(n) : 
	
	l=[]
	i = 1
	while i <= math.sqrt(n): 
		
		if (n % i == 0) : 
			
			
			if (n // i == i) : 
				l.append(i)
			else : 
				l.append(i)
				l.append(n//i)
		i = i + 1
	return l

def SieveOfEratosthenes(n): 
	
	l=[]
	
	prime = [True for i in range(n+1)] 
	p = 2
	while (p * p <= n): 
		
		if (prime[p] == True): 
			
			for i in range(p * p, n+1, p): 
				prime[i] = False
		p += 1
	
	for p in range(2, n+1): 
		if prime[p]: 
			l.append(p)
	
	return l		

def primeFactors(n): 
	
	l=[]
	
	while n % 2 == 0: 
		l.append(2) 
		n = n / 2
		
	for i in range(3,int(math.sqrt(n))+1,2): 
		
		while n % i== 0: 
			l.append(i) 
			n = n / i 
			
	if n > 2: 
		l.append(n)
	
	return(l)	
		

def Factors(n) : 
	
	
	result = []
	
	for i in range(2,(int)(math.sqrt(n))+1) : 

		if (n % i == 0) : 
		    
			if (i == (n/i)) : 
				result.append(i)
			else : 
			    result.append(i)
			    result.append(n//i)
		
	result.append(1)
	result.append(n)
	return result

def maxSubArraySum(a): 
	
	max_so_far = 0
	max_ending_here = 0
	size=len(a)
	
	for i in range(0, size): 
		max_ending_here = max_ending_here + a[i] 
		if (max_so_far < max_ending_here): 
			max_so_far = max_ending_here 

		if max_ending_here < 0: 
			max_ending_here = 0
	return max_so_far 

#print(SieveOfEratosthenes(100))
#print(Divisors(100))
#print(primeFactors(100))
#print(Factors(100))
#print(maxSubArraySum(a)
def dfs(l,x,y,n,m,s):
    
    
    if x<0 or y<0 or x>=n or y>=m:
        return 

    if l[x][y]!='#' and s[x][y]!=1:
        s[x][y]=1
        dfs(l,x-1,y,n,m,s)
        dfs(l,x,y-1,n,m,s)
        dfs(l,x,y+1,n,m,s)
        dfs(l,x+1,y,n,m,s)

    elif l[x][y] == '#' :
        return
    


def main():

    n,m=list(map(int,input().split()))
    l=[]
    s=[]
    for j in range(0,n):
        l.append(list(input()))
        
    for j in range(0,n):
        l1=[]
        for k in range(0,m):
            l1.append(-1)
        s.append(l1)    
            
    c=0
    for j in range(n-1,-1,-1):
        f=0
        for k in range(m-1,-1,-1):
                if l[j][k]=='B':
                    
                    if k-1 >= 0:
                        if l[j][k-1] == '.':
                            l[j][k-1]='#'
                    if j-1 >= 0:
                        if l[j-1][k] == '.':
                            l[j-1][k]='#'
                    if k+1 < m:
                        if l[j][k+1] == '.':
                            l[j][k+1]='#'
                    if j+1 < n:
                        if l[j+1][k] == '.':
                            l[j+1][k]='#'
                elif l[j][k]=='G':
                    c+=1
                            
    if l[n-1][m-1] == '#' and c>0:
        print("No")
    
    else:
        f=0
        r=dfs(l,n-1,m-1,n,m,s)
        #print(s)
        for j in range(0,n):
            for k in range(0,m):
                
                if l[j][k]=='G' and s[j][k]==-1:
                        f=1
                        break
                elif l[j][k]=='B' and s[j][k]==1:
                        f=1
                        break
            if f==1:
                break
        
        if f==1:
            print("No")
        else:
            print("Yes")
         
    
    
t=int(input())
for i in range(0,t):
    main()


    