#include <bits/stdc++.h>
#define MAX 100000
#define ll long long
#define upperlimit 1000100
#define INF 1e18
#define eps 1e-8
#define endl '\n'
#define pcc pair<char,char>
#define pii pair<ll,int>
#define pll pair<ll,ll>
#define tr(container,it) for(typeof(container.begin()) it=container.begin();it!=container.end();it++)
#define MOD 10000000000000007LL
#define slld(t) scanf("%lld",&t)
#define sd(t) scanf("%d",&t)
#define pd(t) printf("%d\n",t)
#define plld(t) printf("%lld\n",t)
#define mp(a,b) make_pair(a,b)
#define FF first
#define SS second
#define pb(x) push_back(x)
#define vi vector<int>
#define clr(a) memset(a,0,sizeof(a))
#define debug(a) printf("check%d\n",a)
#define csl ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
 
ll gcd(ll n1,ll n2){
	if(n1%n2==0)return n2;
	return gcd(n2,n1%n2);
}
ll powmod(ll base,ll exponent)
{
	ll ans=1;
	while(exponent){
		if(exponent&1)ans=(ans*base)%MOD;
		base=(base*base)%MOD;
		exponent/=2;
	}
	return ans;
}
ll arr[5][5];
ll mulr[5][5];
ll powr[5][5];
ll mul2[5][5];
ll fr[5][5];
void poww(int x)
{
	//cout<<"poww "<<k<<endl;
	if(x==1)
	{
		for(int i=0;i<3;i++)
			for(int j=0;j<3;j++)
				powr[i][j]=arr[i][j]%10;
			return;
	}
	if(x%2==0)
	{
		poww(x/2);
		for(int i=0;i<3;i++)
			for(int j=0;j<3;j++)
				{mulr[i][j]=0;for(int k=0;k<3;k++)
					mulr[i][j]+=powr[i][k]*powr[k][j];
					mulr[i][j]%=10;}
		for(int i=0;i<3;i++)
			for(int j=0;j<3;j++)
				powr[i][j]=mulr[i][j]%10;;
	}
	else
	{
		poww(x/2);
		for(int i=0;i<3;i++)
			for(int j=0;j<3;j++)
				{mulr[i][j]=0;for(int k=0;k<3;k++)
					mulr[i][j]+=powr[i][k]*powr[k][j];
					mulr[i][j]%=10;}

		for(int i=0;i<3;i++)
			for(int j=0;j<3;j++)
				{mul2[i][j]=0;for(int k=0;k<3;k++)
					mul2[i][j]+=mulr[i][k]*arr[k][j];
					mul2[i][j]%=10;}
		for(int i=0;i<3;i++)
			for(int j=0;j<3;j++)
				powr[i][j]=mul2[i][j]%10;
	}
}
void f(int x)
{
	//cout<<"here "<<k<<endl;
	if(x==1)
	{
		for(int i=0;i<3;i++)
			for(int j=0;j<3;j++)
				fr[i][j]=arr[i][j]%10;
			return;
	}
	else if(x%2==0)
	{
		f(x/2);
		poww(x/2);
		for(int i=0;i<3;i++)
			for(int j=0;j<3;j++)
				{mulr[i][j]=0;for(int k=0;k<3;k++)
					mulr[i][j]+=powr[i][k]*fr[k][j];
					mulr[i][j]%=10;}

		for(int i=0;i<3;i++)
			for(int j=0;j<3;j++)
				fr[i][j]=(fr[i][j]+mulr[i][j])%10;
	}
	else
	{
		f(x/2);
		poww(x/2);
		for(int i=0;i<3;i++)
			for(int j=0;j<3;j++)
				{mulr[i][j]=0;for(int k=0;k<3;k++)
					mulr[i][j]+=powr[i][k]*fr[k][j];
					mulr[i][j]%=10;}
		int temp[5][5];
		for(int i=0;i<3;i++)
			for(int j=0;j<3;j++)
				temp[i][j]=mulr[i][j];
		poww(x);
		for(int i=0;i<3;i++)
			for(int j=0;j<3;j++)
			{
					mul2[i][j]=temp[i][j]+powr[i][j];
					//cout<<x<<" "<<temp[i][j]<<endl;
					mul2[i][j]%=10;
					}
		for(int i=0;i<3;i++)
			for(int j=0;j<3;j++)
				fr[i][j]=(fr[i][j]+mul2[i][j])%10;
	}
}
char a[100][100];
char b[100][100];
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			cin>>a[i][j];
	for(int i=0;i<m;i++)
		for(int j=0;j<m;j++)
			cin>>b[i][j];
	for(int i=0;i<=n-m;i++)
	{
		for(int j=0;j<=n-m;j++)
		{
			bool flag=true;
			for(int x=0;x<m;x++)
			{
				for(int y=0;y<m;y++)
				{
					if(a[i+x][j+y]!=b[x][y])
						flag=false;
				}
			}
			if(flag)
			{	cout<<"Yes"<<endl;return 0;}
		}
	}
	cout<<"No"<<endl;
}

Measured memory_bytes: 256