using namespace std; #include "bits/stdc++.h" #define REP(a, b) for (long long a = 0; a < b; ++a) #define ALL(a) begin(a), end(a) #define ld long double #define int long long vector> inputs; int n, m; int can(int target) { vector> nexts(n, vector(m, 0)); REP(i, m) { nexts[0][i] = 1; } for (int i = 1; i < n; ++i) { int l = 0; int r = 0; int cnts = 0; for (int j = 0; j < m; ++j) { while (r != m and inputs[i - 1][r] <= inputs[i][j]) { cnts += nexts[i - 1][r]; r++; } while (l != m and inputs[i - 1][l] + target + 1 <= inputs[i][j]) { cnts -= nexts[i - 1][l]; l++; } if (cnts != 0) { nexts[i][j] = 1; } } } REP(i, m) { if (nexts[n - 1][i]) return 1; } return 0; } void solve() { cin >> n >> m; REP(i, n) { vector now; REP(q, m) { int x; cin >> x; now.push_back(x); } sort(ALL(now)); inputs.push_back(now); } int bot = 1e18; int top = -1; while (bot - top > 1) { int mid = (bot + top) / 2; if (can(mid)) { bot = mid; } else { top = mid; } } if (can(bot)) { cout << bot << endl; } else { cout << -1 << endl; } } #undef int int main() { // Fasterize input/output script ios::sync_with_stdio(false); cin.tie(nullptr); cout << fixed << setprecision(100); int t = 1; // cin >> t; // comment out if solving multi testcase for (int testCase = 1; testCase <= t; ++testCase) { solve(); } return 0; }