#include <bits/stdc++.h>
using namespace std;
template <class T, class L>
bool smax(T& x, L y) {
  return x < y ? (x = y, 1) : 0;
}
template <class T, class L>
bool smin(T& x, L y) {
  return x > y ? (x = y, 1) : 0;
}
const int maxn = 2e3 + 17;
string s[maxn];
int n, k, f[maxn];
vector<int> get(int l, int r) {
  if (r - l < 2) return {0, 0};
  int mid = min_element(f + l + 1, f + r) - f;
  vector<int> L = get(l, mid), R = get(mid, r);
  vector<int> ans(r - l + 1, 0);
  for (int i = 0; i < L.size(); i++)
    for (int j = 0; j < R.size(); j++)
      smax(ans[i + j], L[i] + R[j] + i * j * f[mid]);
  return ans;
}
int main() {
  ios::sync_with_stdio(0), cin.tie();
  cin >> n >> k;
  for (int i = 0; i < n; i++) cin >> s[i];
  sort(s, s + n);
  for (int i = 0; i < n - 1; i++)
    f[i + 1] = mismatch(s[i].begin(), s[i].end(), s[i + 1].begin()).first -
               s[i].begin();
  cout << get(0, n)[k] << '\n';
  return 0;
}
