#include <bits/stdc++.h>
using namespace std;
int stop, n, k, x, i, ind, j, y[1000001], mini[2001][2001];
string s[2001];
struct name {
  int a[26];
  int cnt;
} trie[1000001];
vector<int> d[1000001];
int m;
void add(int v, int pos) {
  if (pos > s[i].length()) return;
  if (trie[v].a[s[i][pos] - 'a'])
    add(trie[v].a[s[i][pos] - 'a'], pos + 1);
  else {
    m++;
    trie[v].a[s[i][pos] - 'a'] = m;
    add(m, pos + 1);
  };
  trie[v].cnt++;
}
void dp(int v) {
  for (int j = 0; j < 26; j++)
    if (trie[v].a[j]) dp(trie[v].a[j]);
  d[v].resize(trie[v].cnt + 1);
  for (int j = 0; j < 26; j++) {
    int p = trie[v].a[j];
    if (p == 0) continue;
    int s = d[p].size() - 1;
    for (int k1 = d[v].size() - s - 1; k1 >= 0; k1--)
      for (int i = 1; i <= s; i++) {
        d[v][k1 + i] = max(d[v][k1 + i], d[v][k1] + d[p][i] + i * (i - 1) / 2);
      }
  }
}
int main() {
  cin >> n >> k;
  for (i = 1; i <= n; i++) {
    cin >> s[i];
    add(0, 0);
  };
  dp(0);
  cout << d[0][k];
  return 0;
}
