package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func nextPermutation(a []int) bool {
i := len(a) - 2
for i >= 0 && a[i] >= a[i+1] {
i--
}
if i < 0 {
return false
}
j := len(a) - 1
for a[j] <= a[i] {
j--
}
a[i], a[j] = a[j], a[i]
for l, r := i+1, len(a)-1; l < r; l, r = l+1, r-1 {
a[l], a[r] = a[r], a[l]
}
return true
}
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n, k int
if _, err := fmt.Fscan(in, &n, &k); err != nil {
return
}
nums := make([]string, n)
for i := 0; i < n; i++ {
fmt.Fscan(in, &nums[i])
if len(nums[i]) < k {
nums[i] = strings.Repeat("0", k-len(nums[i])) + nums[i]
} else if len(nums[i]) > k {
nums[i] = nums[i][len(nums[i])-k:]
}
}
digits := make([][]int, n)
for i := 0; i < n; i++ {
digits[i] = make([]int, k)
for j := 0; j < k; j++ {
digits[i][j] = int(nums[i][j] - '0')
}
}
p := make([]int, k)
for i := 0; i < k; i++ {
p[i] = i
}
best := int(1e9)
for {
minv := int(1e9)
maxv := -1
for i := 0; i < n; i++ {
val := 0
for j := 0; j < k; j++ {
val = val*10 + digits[i][p[j]]
}
if val < minv {
minv = val
}
if val > maxv {
maxv = val
}
}
diff := maxv - minv
if diff < best {
best = diff
}
if !nextPermutation(p) {
break
}
}
fmt.Fprintln(out, best)
}