#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void checkmin(T &a, T b) {
  if (b < a) a = b;
}
template <class T>
inline void checkmax(T &a, T b) {
  if (b > a) a = b;
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <class T>
inline T gcd(T a, T b) {
  if (a < 0) return gcd(-a, b);
  if (b < 0) return gcd(a, -b);
  return (b == 0) ? a : gcd(b, a % b);
}
template <class T>
inline T lcm(T a, T b) {
  if (a < 0) return lcm(-a, b);
  if (b < 0) return lcm(a, -b);
  return a * (b / gcd(a, b));
}
template <class T>
inline bool isPrimeNumber(T n) {
  if (n <= 1) return false;
  for (T i = 2; i * i <= n; i++)
    if (n % i == 0) return false;
  return true;
}
long long toInt64(string s) {
  long long r = 0;
  istringstream sin(s);
  sin >> r;
  return r;
}
const double pi = acos(-1.0);
const double eps = 1e-5;
const int inf = 1000000000;
int main() {
  int n, k;
  string s[10];
  long long t[10];
  cin >> n >> k;
  for (int i = 0; i < n; i++) cin >> s[i];
  int a[10];
  for (int i = 0; i < k; i++) a[i] = i;
  long long ans = inf;
  do {
    for (int i = 0; i < n; i++) {
      string tmp = s[i];
      for (int j = 0; j < k; j++) tmp[j] = s[i][a[j]];
      t[i] = toInt64(tmp);
    }
    sort(t, t + n);
    checkmin(ans, t[n - 1] - t[0]);
  } while (next_permutation(a, a + k));
  cout << ans << endl;
  return 0;
}
