#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const long long modl = 998244353;
const double pie = 3.1415926535;
unsigned long long power(unsigned long long x, unsigned long long y) {
  if (y == 0)
    return 1;
  else {
    if (y % 2 == 0)
      return power(x * x, y / 2);
    else
      return x * power(x * x, (y - 1) / 2);
  }
}
long long mod_power(long long x, long long y, long long m) {
  long long r = 1;
  x = x % m;
  if (x == 0) return 0;
  while (y > 0) {
    if (y & 1) r = (r * x) % m;
    y = y / 2;
    x = (x * x) % m;
  }
  return r;
}
long long gcd(long long x, long long y) {
  if (y == 0) return x;
  return gcd(y, x % y);
}
void transpose(int xl, int xr, int yl, int yr) {}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int TESTS = 1;
  while (TESTS--) {
    int n, m;
    cin >> n >> m;
    int a[n][m];
    int b[n][m];
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) cin >> a[i][j];
    }
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) cin >> b[i][j];
    }
    bool ok = true;
    map<int, vector<int> > A;
    map<int, vector<int> > B;
    for (int i = 0; i < m; i++) {
      int x = 0;
      for (int j = i; j >= 0; j--) {
        A[i].push_back(a[x][j]);
        x++;
        if (x == n) break;
      }
      sort(A[i].begin(), A[i].end());
    }
    int y = m;
    for (int i = 1; i < n; i++) {
      int x = i;
      for (int j = m - 1; j >= 0; j--) {
        A[y].push_back(a[x][j]);
        x++;
        if (x == n) break;
      }
      sort(A[y].begin(), A[y].end());
      y++;
    }
    for (int i = 0; i < m; i++) {
      int x = 0;
      for (int j = i; j >= 0; j--) {
        B[i].push_back(b[x][j]);
        x++;
        if (x == n) break;
      }
      sort(B[i].begin(), B[i].end());
    }
    y = m;
    for (int i = 1; i < n; i++) {
      int x = i;
      for (int j = m - 1; j >= 0; j--) {
        B[y].push_back(b[x][j]);
        x++;
        if (x == n) break;
      }
      sort(B[y].begin(), B[y].end());
      y++;
    }
    auto ip = A.begin();
    auto it = B.begin();
    for (ip; ip != A.end(); ip++) {
      if (ip->second != it->second) ok = false;
      it++;
      if (!ok) break;
    }
    if (!ok)
      cout << "NO" << '\n';
    else
      cout << "YES" << '\n';
  }
}
