#include <bits/stdc++.h>
using namespace std;
const int maxn = 22;
const int mod = 1e9 + 7;
int N, M;
vector<int> er[maxn], per;
int cont(vector<int> v, vector<int> c) {
  if (v == c) return 1;
  for (int i = 0; i < (int)v.size(); i++)
    for (int j = i + 1; j < (int)v.size(); j++) {
      swap(v[i], v[j]);
      if (v == c) return 1;
      swap(v[i], v[j]);
    }
  return 0;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> N >> M;
  for (int i = 1; i <= N; i++)
    for (int j = 1; j <= M; j++) {
      int a;
      cin >> a;
      er[i].push_back(a);
    }
  for (int i = 1; i <= M; i++) per.push_back(i);
  if (cont(er[1], per)) {
    int flag = 1;
    for (int i = 2; i <= N; i++)
      if (!cont(er[i], er[1])) {
        flag = 0;
        break;
      }
    if (flag) {
      cout << "YES" << '\n';
      exit(0);
    }
  }
  for (int i = 0; i < (int)er[1].size(); i++)
    for (int j = i + 1; j < (int)er[1].size(); j++) {
      swap(er[1][i], er[1][j]);
      if (!cont(er[1], per)) {
        swap(er[1][i], er[1][j]);
        continue;
      }
      int flag = 1;
      for (int k = 2; k <= N; k++)
        if (!cont(er[k], er[1])) {
          flag = 0;
          break;
        }
      if (flag) {
        cout << "YES" << '\n';
        exit(0);
      }
      swap(er[1][i], er[1][j]);
    }
  cout << "NO" << '\n';
  return 0;
}
