/**

    +++---------+++--------- Don't lose faith ---------+++---------+++

    +++---------+++--------- Author : sea_26 ----------+++---------+++

    **/

    #pragma GCC optimize("03")
    #include <bits/stdc++.h>

    using namespace std;

    using ll = long long;
    using ld = long double;

    priority_queue<int> pq;

    const int M = 1e9 + 7;
    const ll MOD = 998244353;
    const ld eps = 1e-9;
    const ld PI = acos(-1.0);

    // const double pi = atan2(0, -1);
    // const double PI = 4 * atan(1);
    // const double pi = 2*cos(0.0);

    const int iinf = 0x3f3f3f3f;
    const ll linf = 0x3f3f3f3f3f3f3f3f;

    #define mp make_pair
    #define eb emplace_back
    #define ep emplace
    #define f first
    #define s second
    #define sz size()

    #define bp(n)  __builtin_popcount(n)
    #define bclz(n) __builtin_clzll(n)
    #define bctz(n) __builtin_ctzll(n)
    #define bip(n) __builtin_parity(n)

    #define vsort(v) sort(v.begin(),v.end())
    #define rvsort(v) sort(v.begin(),v.end(),greater<int>())
    #define mnv(v) *min_element(v.begin(),v.end())
    #define mxv(v) *max_element(v.begin(),v.end())
    #define all(v) (v).begin(),(v).end()
    #define ita(v) iota(all(v), 0)

    #define ub upper_bound
    #define lb lower_bound
    #define cr(n) (floor)cbrt(n)
    #define msz(a) memset(a, 0, sizeof(a))
    #define msm(a) memset(a, 0xff, sizeof(a))

    #define rep(n) for(int i=0; i<n; i++)
    #define rrep(n) for(int i=n-1; i>=0; i--)
    #define lrep(p,q) for(int j=p; j<=q; j++)
    #define ldrep(p,q) for(int i=p; i>=q; i--)
    #define rsrep(n) for(int i=2; i*i<=n; i++)
    #define it(v)  for(auto p: v)
    #define yes cout << "YES" << endl
    #define no cout << "NO" << endl

    #define fs ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);

    template< typename T> inline T MAX(T a, T b){ return a ^ ((a ^ b) & -(a < b)); }
    template< typename T> inline T MIN(T a, T b){ return b ^ ((a ^ b) & -(a < b)); }
    template< typename T> void tpns(T n){ rrep(30){ if(n & (1 << i)) pq.push(1 << i); } }
    template< typename T> void SWAP(T &a, T &b){ a = ((a) ^= (b)),  b = ((b) ^= (a)),  a = ((a) ^= (b)); }
    template< typename T> inline T mod(T a, T b){ return a >= b ? a % b : a; }
    template< typename T> inline T gcd(T a, T b){ while (b) b ^= a ^= b ^= a %= b; return a; }
    ///template< typename T> inline T gcd(T a, T b) {while(b){int r = a % b; a = b; b = r;}return a; } /// T.C : log(a+b)
    template< typename T> inline T lcm(T a, T b){ return (a / gcd(a,b)) * b; }
    template< typename T> T sqr(T x){ return x * x; }
    template< typename T> T bigmod(T n,ll p, T M){ if(!p) return 1; else{ T r = sqr(bigmod(n,p >> 1, M))%M; if(p&1) r = (r*n)%M; return r; }}
    template< typename T> T exgcd(T a, T b, T& x, T& y){ if(!b){ x = 1; y = 0;return a;} else{T g = exgcd(b,a%b,y,x); y -= (a/b)*x; return g;}}
    template< typename T> T icbrt(T mul){T r = cbrt(mul) + 1; while(r * r * r > mul) r--; return r; } /// 54229668

    ///ll gcdextd(ll a, ll b, ll& x, ll& y) { if (!a) { x = 0; y = 1; return b; }  ll y1,d; d = gcdextd(b % a, a, y, y1);  x = y1 - (b / a) * y; return d; }
    ll takemod(ll a){return ((a % M) + M) % M; }
    ll fexpo(ll base, ll e){ ll res = 1; while(e > 0){ if(e & 1) res = (res * base) % M; base = (base * base ) % M; e >>= 1; } return 0; }
    ll modinv(ll a){return takemod(fexpo(takemod(a), M-2));}

    void ReT(){ cout << "\nTime = " << fixed << setprecision(3) << double(clock()) / CLOCKS_PER_SEC  << " Sec"<< endl; exit(0);}

    int n, m;
    char img[55][55], fnd[55][55];


    bool chk(int x, int y){

        rep(m){
            lrep(0,m-1){
                if(img[i+x][j+y] != fnd[i][j])
                    return false;
            }
        }
        return true;
    }

    int main(){

        fs;

        cin >> n >> m;

        rep(n)
        lrep(0,n-1)
            cin >> img[i][j];

        rep(m)
        lrep(0,m-1)
            cin >> fnd[i][j];

        bool flag = false;
        rep(n){
            lrep(0,n-1){
                if(img[i][0] == fnd[0][0] and chk(i,j)){
                    flag = true;
                    break;
                }
                if(flag) break;
            }
        }

        if(flag) cout << "Yes" << endl;
        else cout << "No" << endl;
        /// ReT();

    return 0;
    }


Measured memory_bytes: 256