#define rep(i,n) for(int i=0;i<(int)(n);i++) #define ALL(v) v.begin(),v.end() typedef long long ll; #include using namespace std; int dp[1515][1515]; const int INF=1e9+7; int main(){ ios::sync_with_stdio(false); std::cin.tie(nullptr); for(int i=1;i<1515;i++) rep(j,1515) dp[i][j]=INF; int n,m; cin>>n>>m; vector> D(n,vector (m)); rep(i,n) rep(j,m) cin>>D[i][j]; rep(i,n) sort(ALL(D[i])); for(int i=1;i1){ int mid=(ok+ng)/2; if(dp[i-1][mid]-abs(D[i][j]-D[i-1][mid])>=0) ok=mid; else ng=mid; } if(ok>0) dp[i][j]=min(max(dp[i-1][ok],D[i][j]-D[i-1][ok]),max(dp[i-1][ok-1],D[i][j]-D[i-1][ok-1])); else if(ok==0) dp[i][j]=max(dp[i-1][ok],D[i][j]-D[i-1][ok]); else continue; } } int ans=INF; rep(j,m) ans=min(ans,dp[n-1][j]); if(ans==INF) cout<<-1<