#include <bits/stdc++.h>   using namespace std;   int main() {     int n, m;     cin >> n >> m;     int A[n][m], B[n][m], C[n][m];     vector<int> a, b;     for (int i = 0; i < n; i++) {       for (int j = 0; j < m; j++) {         cin >> A[i][j];         a.push_back(A[i][j]);       }     }     for (int i = 0; i < n; i++) {       for (int j = 0; j < m; j++) {         cin >> B[i][j];         b.push_back(B[i][j]);       }     }     sort(a.begin(), a.end());     sort(b.begin(), b.end());     for (int i = 0; i < a.size(); i++) {       if (a[i] != b[i]) {         cout <<  NO  << endl;         return 0;       }     }     if (n >= m) {       for (int i = 0; i < n; i++) {         long long x = 0;         for (int j = 0; j < min(i + 1, m); j++) {           x ^= (long long)(A[i - j][j] ^ B[i - j][j]);         }         if (x) {           cout <<  NO  << endl;           return 0;         }       }       for (int i = 0; i < m - 1; i++) {         long long x = 0;         for (int j = 1; j + i < m; j++) {           x ^= (long long)(A[n - j][j + i] ^ B[n - j][j + i]);         }         if (x) {           cout <<  NO  << endl;           return 0;         }       }     } else {       for (int i = 0; i < m; i++) {         long long x = 0;         for (int j = 0; j < min(i + 1, n); j++) {           x ^= (long long)(A[j][i - j] ^ B[j][i - j]);         }         if (x) {           cout <<  NO  << endl;           return 0;         }       }       for (int i = 0; i < n - 1; i++) {         long long x = 0;         for (int j = 1; j + i < n; j++) {           x ^= (long long)(A[j + i][m - j] ^ B[j + i][m - j]);         }         if (x) {           cout <<  NO  << endl;           return 0;         }       }     }     cout <<  YES  << endl;   }   