#include<iostream>
#include<queue>
#include<map>
#include<set>
using namespace std;;
int q,n,m,a[10010][10010],b[10010][10010],sum1,sum2;
string change_w(string s,int x){
for(int i=0;i<m;i++){
if(s[x*m+i]=='1')s[x*m+i]='0';
else s[x*m+i]='1';
}
return s;
}
string change_h(string s,int x,int y){
for(int i=0;i<n;i++){
swap(s[i*m+x],s[i*m+y]);
}
return s;
}
int main(){
cin>>q;
while(q--){
queue<string> q;
cin>>n>>m;string s1,s2;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j]==1)sum1++;
s1+=char(a[i][j]+'0');
}
}for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>b[i][j];
if(b[i][j]==1)sum2++;
s2+=char(b[i][j]+'0');
}
}
if(sum1!=sum2){
cout<<"NO"<<endl;
break;
}
map<string,bool> vis;
int p=0;
vis[s1]=1;
q.push(s1);
while(!q.empty()){
string f=q.front();
q.pop();
vis[f]=1;
if(f==s2){
p=1;
cout<<"YES"<<endl;;
break;
}
for(int i=0;i<n;i++){
string k=change_w(f,i);
if(!vis[k]){
q.push(k);
}
}
for(int i=0;i<m;i++){
for(int j=i+1;j<m;j++){
string k=change_h(f,i,j);
if(!vis[k]){
q.push(k);
}
}
}
}
if(p==0){
cout<<"NO"<<endl;
}
}
return 0;
}