#include <bits/stdc++.h>
using namespace std;
const int maxn = 500 + 10;
int n, m;
int a[maxn][maxn], b[maxn][maxn], c[maxn], d[maxn];
int main() {
  scanf("%d%d", &n, &m);
  if (n >= m) {
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) scanf("%d", &a[i][j]);
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) scanf("%d", &b[i][j]);
  } else {
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) scanf("%d", &a[j][i]);
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) scanf("%d", &b[j][i]);
  }
  int x = min(n, m), y = max(n, m);
  bool flag = true;
  for (int i = 1; i <= x; i++) {
    for (int j = 1; j <= i; j++) c[j] = a[j][i - j + 1], d[j] = b[j][i - j + 1];
    sort(c + 1, c + i + 1);
    sort(d + 1, d + i + 1);
    for (int j = 1; j <= i; j++)
      if (c[j] != d[j]) {
        flag = false;
        break;
      }
    if (!flag) break;
  }
  for (int i = x + 1; i < y; i++) {
    if (!flag) break;
    for (int j = 1; j <= x; j++) c[j] = a[i - j + 1][j], d[j] = b[i - j + 1][j];
    sort(c + 1, c + x + 1);
    sort(d + 1, d + x + 1);
    for (int j = 1; j <= x; j++)
      if (c[j] != d[j]) {
        flag = false;
        break;
      }
    if (!flag) break;
  }
  for (int i = 1; i < x; i++) {
    if (!flag) break;
    for (int j = 1; j <= x - i; j++) {
      c[j] = a[y - j + 1][i + j];
      d[j] = b[y - j + 1][i + j];
    }
    sort(c + 1, c + x - i + 1);
    sort(d + 1, d + x - i + 1);
    for (int j = 1; j <= x - i; j++)
      if (c[j] != d[j]) {
        flag = false;
        break;
      }
    if (!flag) break;
  }
  if (flag)
    printf("YES\n");
  else
    printf("NO\n");
  return 0;
}
