#include <bits/stdc++.h>
using namespace std;
inline int ni() {
  int a;
  scanf("%d", &a);
  return a;
}
inline double nf() {
  double a;
  scanf("%lf", &a);
  return a;
}
template <class T>
void out(T a, T b) {
  bool first = true;
  for (T i = a; i != b; i++) {
    if (!first) printf(" ");
    first = false;
    cout << *i;
  }
  puts("");
}
template <class T>
void outl(T a, T b) {
  for (T i = a; i != b; i++) cout << *i << "\n";
}
const int MAXN = 100;
inline int getBit(int x, int k) { return (x >> k) & 1; }
int n, k;
vector<string> v;
int d[MAXN][MAXN];
int maxmask;
int best;
int ct;
int main() {
  n = ni();
  k = ni();
  v.resize(n);
  for (int i = 0; i < (int)(n); i++) cin >> v[i];
  for (int i = 0; i < (int)(n); i++) {
    for (int j = i + 1; j < n; j++) {
      while (d[i][j] < min(v[i].size(), v[j].size()) &&
             v[i][d[i][j]] == v[j][d[i][j]])
        d[i][j]++;
    }
  }
  maxmask = (1 << n);
  for (int mask = 0; mask < (int)(maxmask); mask++) {
    ct = 0;
    for (int i = 0; i < (int)(n); i++)
      if (getBit(mask, i)) {
        ct++;
      }
    if (ct != k) continue;
    int cur = 0;
    for (int i = 0; i < (int)(n); i++) {
      if (getBit(mask, i)) {
        for (int j = i + 1; j < n; j++) {
          if (getBit(mask, j)) {
            cur += d[i][j];
          }
        }
      }
    }
    if (best < cur) best = cur;
  }
  cout << best << endl;
}
