#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;

#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
typedef pair<int, int> pii;
typedef vector<int> vi;


void ProGamerMove() {
	int n, k; cin >> n >> k;
	vector<string> s(n);
	for (auto& v : s) cin >> v;
	vector<int> a(n - 1), b(n - 1);
	ll cur = 0, sb = 0, sa = 0, res = 0;
	int j = 0;
	for (int i = 0; i < n - 1; ++i) {
		while (cur < k && j + 1 < n) {
			++j;
			while (a[j - 1] < s[j - 1].size() && a[j - 1] < s[j].size() && s[j][a[j - 1]] == s[j - 1][a[j - 1]] && (j == 1 || a[j - 2] > a[j - 1])) {
				++sa;
				++a[j - 1];
			}
			while (b[j - 1] < s[j - 1].size() && b[j - 1] < s[j].size() && s[j][b[j - 1]] == s[j - 1][b[j - 1]]) {
				++sb;
				++b[j - 1];
			}
			for (int nj = j - 2; nj >= 0; --nj) {
				if (b[nj] <= b[nj + 1]) break;
				sb -= b[nj] - b[nj + 1];
				b[nj] = b[nj + 1];
			}
			cur += sb;
		}
		if (cur < k) break;
		res += n - j;
		cur -= sa;
		a[i] = INT_MAX;
		for (int ni = i + 1; ni < j; ++ni) {
			bool up = false;
			while (a[ni] < s[ni].size() && a[ni] < s[ni + 1].size() && s[ni][a[ni]] == s[ni + 1][a[ni]] && a[ni - 1] > a[ni]) {
				++sa;
				++a[ni];
				up = true;
			}
			if (!up) break;
		}
	}
	cout << res << '\n';
}

int main() {
	cin.tie(0)->sync_with_stdio(0);
	cin.exceptions(cin.failbit);
	int tc = 1;
	// cin >> tc;
	while(tc--) ProGamerMove();
}