#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define Max 51
bool cpu=false;
char a[Max][Max],b[Max][Max];
int  N,M;
void dfs(int row,int zb,int cont,bool md){
	int i,k,kk;
	if(row==N)
	return;
	if (cont==M+1){
		cpu=true;
		return;
	}
	if(md==false){
		for(i=0;i<N;i++){
			if(cpu)
			return;
			if(i+M==N)
			break;
		k=i;
		for(kk=0;k<i+M;k++,kk++){
			if(a[row][k]!=b[row][kk])
			break;
		if(k==i+M)
		dfs(row+1,i,cont+1,true);
		}
		}
	}
	else{
	 for(kk=0,k=zb;k<zb+M;kk++,k++)
	 if(a[row][k]!=b[row][kk])
	 break;
	 if(k==zb+M)
	 dfs(row+1,zb,cont+1,true);
	 return;
	}
	if(cpu)
	return;
	dfs(row+1,zb,cont,md);
	return;
}


int main(){
	int i,k;
	cin>>N>>M;
	for(i=0;i<N;i++)
	for(k=0;k<N;k++)
	cin>>a[i][k];
	for(i=0;i<M;i++)
	for(k=0;k<M;k++)
	cin>>b[i][k];
	dfs(0,0,1,false);
	if(cpu)
	cout<<"Yes";
	else
	cout<<"No";
	return 0;
}