#include <bits/stdc++.h>
using namespace std;
long long MX = 100001;
vector<long long> check(MX, 1), divisor(MX, 2);
void prime() {
  long long i, j;
  for (i = 3; i < MX; i += 2) {
    if (check[i]) {
      divisor[i] = i;
      for (j = i * i; j < MX; j += 2 * i) divisor[j] = i, check[j] = 0;
    }
  }
}
long long task(long long case_no) {
  long long n, k;
  cin >> n >> k;
  vector<string> s;
  while (n--) {
    long long tmp;
    string t;
    for (long long i = 0; i < k; ++i) cin >> tmp, t += 48 + tmp;
    s.push_back(t);
  }
  long long mask = 1 << k;
  long long i;
  for (i = 0; i < mask; ++i) {
    map<long long, long long> pos;
    long long y = i, j;
    for (j = 0; j < k; ++j) {
      if ((1 << j) & i) pos[j] = 1;
    }
    long long p;
    for (j = 0; j < s.size(); ++j) {
      for (p = 0; p < k; ++p) {
        if (pos[p] && s[j][p] == '1')
          continue;
        else if (!pos[p] && s[j][p] == '0')
          continue;
        else
          break;
      }
      if (p == k) break;
    }
    if (j != s.size()) {
      for (j = 0; j < s.size(); ++j) {
        for (p = 0; p < k; ++p) {
          if (pos[p] && s[j][p] == '1') break;
        }
        if (p == k) break;
      }
      if (j != s.size()) {
        cout << "YES\n";
        return 0;
      }
    }
  }
  cout << "NO\n";
  return 0;
}
int main() {
  int t = 1, i = 0;
  while (t--) {
    task(++i);
  }
  return 0;
}
