n,m=map(int,input().split()) s=[list(map(int,input().split()))for i in range(n)] for i in range(n):s[i].sort() from bisect import* def ge(a, x): i = bisect_left(a, x) if i != len(a):return a[i] return -1 ans=10**18 for i in range(m): c=s[0][i] k=0 for j in range(1,n): r=ge(s[j],c) if r==-1:break k=max(k,r-c) c=r else:ans=min(ans,k) if ans==10**18:print(-1) else:print(ans)