import sys #input = lambda :sys.stdin.readline()[:-1] ni = lambda :int(input()) na = lambda :list(map(int,input().split())) yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES") no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO") ####################################################################### n, m = na() d = [sorted(na()) for i in range(n)] if n == 1: print(0) exit() from bisect import bisect_left as bl ans = float("inf") for i in range(m): x = d[0][i] z = 0 for j in range(1, n): y = bl(d[j], x) if y == m: break z = max(z, d[j][y]-x) x = d[j][y] else: ans = min(ans, z) if ans == float("inf"): print(-1) else: print(ans)