#include <bits/stdc++.h>
using namespace std;
struct CGlb {
  template <class T>
  void write(vector<T> &r) {
    int i;
    for (i = 0; i < (r.size()); i++) cout << r[i] << ' ';
    cout << endl;
  }
  template <class T>
  void write(T r[], int n) {
    int i;
    for (i = 0; i < (n); i++) {
      if (i) cout << ' ';
      cout << r[i];
    }
    cout << endl;
  }
} x_glb;
int n, m;
int T, Ti, Q, Qi;
long long da, db, dc;
int r[111][111];
int xp(int r[]) {
  int i;
  for (i = 0; i < (m - 1); i++)
    if (r[i] > r[i + 1]) return 0;
  return 1;
}
int xx(int r[]) {
  int z = 1, i, j;
  if (xp(r)) return 1;
  for (i = 0; i < (m); i++)
    for (j = i + 1; j < m; j++) {
      swap(r[i], r[j]);
      if (xp(r)) {
        swap(r[i], r[j]);
        return 1;
      }
      swap(r[i], r[j]);
    }
  return 0;
}
int xa() {
  int i;
  for (i = 0; i < (n); i++)
    if (!xx(r[i])) return 0;
  return 1;
}
int main() {
  ios::sync_with_stdio(false);
  int i, j, k;
  long long a, b, c;
  int x, y, z;
  string zs;
  cout << setiosflags(ios::fixed) << setprecision(8);
  while (cin >> n >> m) {
    da = 1;
    for (i = 0; i < (n); i++)
      for (j = 0; j < (m); j++) cin >> r[i][j];
    da = 0;
    if (xa()) da = 1;
    for (i = 0; i < (m); i++)
      for (j = i + 1; j < m && !da; j++) {
        for (k = 0; k < (n); k++) swap(r[k][i], r[k][j]);
        if (xa()) da = 1;
        for (k = 0; k < (n); k++) swap(r[k][i], r[k][j]);
      }
    if (da)
      cout << "YES" << endl;
    else
      cout << "NO" << endl;
  }
  return 0;
}
