#include <bits/stdc++.h>
using namespace std;
int m[1025][1025], v[1025][1025 / 32], r, c, l, a[1025 / 32], b[1025 * 1025];
int main() {
  int i, j, k, t, _l, _r, _c, x, f;
  for (scanf("%d%d", &r, &c), i = 0; i < r; i++)
    for (j = 0; j < c; scanf("%d", &m[i][j]), b[i * c + j] = m[i][j], j++)
      ;
  sort(b, b + r * c);
  l = (c + 31) / 32;
  for (_l = 0, _r = r * c - 1; _l < _r;) {
    _c = (_l + _r + 1) / 2;
    k = b[_c];
    for (i = 0; i < r; i++)
      for (j = 0; j < l; v[i][j] = 0, j++)
        ;
    for (i = 0; i < r; i++)
      for (j = 0; j < c; j++)
        if (m[i][j] >= k) v[i][j >> 5] |= 1 << (j & 31);
    for (i = 0; i < r; i++) {
      for (t = 0; t < l; a[t] = v[i][t], t++)
        ;
      for (j = i + 1; j < r; j++) {
        f = 0;
        for (t = 0; t < l; t++) {
          x = a[t] & v[j][t];
          if (!x) continue;
          if (f) break;
          f = 1;
          if (x & (x - 1)) break;
        }
        if (t < l) break;
      }
      if (j < r) break;
    }
    if (i < r)
      _l = _c;
    else
      _r = _c - 1;
  }
  printf("%d\n", b[_r]);
  return 0;
}
