#include <stdio.h>

int main() {
    int n,m;
    scanf("%d %d",&n,&m);
    int a[10][10]={0};//定义第一个数组,把数据输入
    int i,j;
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            scanf("%d",&a[i][j]);
        }
    }
    int arr[10][10]={0};//定义第二个数组,把数据输入
      for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            scanf("%d",&arr[i][j]);
        }
    }
    int judge=1;
    int exit=0;
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            if(a[i][j]!=arr[i][j]){//当两数组存在一项不相等的时候,跳出循环
               judge=0;
               break;
               exit=1;//exit 的作用是为了跳出外层循环,也就是当内层循环跳出时,外层循环也要跳出
            }
        }
        if(exit)break;//与上文对应
    }
    if(judge==1){
        printf("Yes\n");
    }else {
        printf("No\n");
    }
    return 0;
}