#include using namespace std; #define rep(i,n) for (long long i=0;i<(long long)(n);i++) #define all(v) v.begin(),v.end() using ll=long long; using pll=pair; using tll=tuple; const ll INF=(1ll<<60); template void chmin(T &a,T b){ if(a>b){ a=b; } } template void chmax(T &a,T b){ if(a> n >> m; vector> d(n,vector(m)); rep(i,n){ rep(j,m){ cin >> d[i][j]; } sort(all(d[i])); } vector> dp(n,vector(m,INF)); rep(i,m) dp[0][i]=0; rep(i,n-1){ rep(j,m){ if(dp[i][j]==INF) continue; for(ll k=m-1;0<=k;k--){ if(d[i][j]<=d[i+1][k]){ chmin(dp[i+1][k],max(dp[i][j],d[i+1][k]-d[i][j])); }else{ break; } } } } ll ans=INF; rep(i,m){ if(dp[n-1][i]==INF) continue; chmin(ans,dp[n-1][i]); } if(ans==INF) cout << -1 << endl; else cout << ans << endl; }