#include <bits/stdc++.h>
using namespace std;
#define nmax 20
#define inf 1e9

int N, M;
string S;
vector<char> letters;
unordered_map<char, int> freq;
int dist[nmax][nmax], dp[1 << nmax][nmax];

int solve()
{
    int fullMask = (1 << M) - 1;
    for (int mask = 0; mask < (1 << M); mask++)
        fill(dp[mask], dp[mask] + M, inf);

    for (int i = 0; i < M; i++)
        dp[1 << i][i] = 0;

    for (int mask = 1; mask < (1 << M); mask++)
    {
        for (int last = 0; last < M; last++)
        {
            if (!(mask & (1 << last)))
                continue;
            for (int next = 0; next < M; next++)
            {
                if (mask & (1 << next))
                    continue;
                int newMask = mask | (1 << next);
                dp[newMask][next] = min(dp[newMask][next], dp[mask][last] + dist[last][next]);
            }
        }
    }

    int res = inf;
    for (int i = 0; i < M; i++)
        res = min(res, dp[fullMask][i]);
    return res;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    freopen("sapphim.inp", "r", stdin);
    freopen("sapphim.out", "w", stdout);
    cin >> N >> M >> S;

    for (char c : S)
        freq[c]++;
    for (auto p : freq)
        letters.push_back(p.first);

    M = letters.size();
    if (M == 1)
    {
        cout << 0 << "\n";
        return 0;
    }

    sort(letters.begin(), letters.end());
    int ans = inf;

    do
    {
        unordered_map<char, int> pos;
        for (int i = 0; i < M; i++)
            pos[letters[i]] = i;

        memset(dist, 0, sizeof dist);
        for (int i = 0; i < M; i++)
            for (int j = 0; j < M; j++)
                dist[i][j] = abs(i - j);

        int cost = 0;
        for (int i = 0; i < N - 1; i++)
            cost += dist[pos[S[i]]][pos[S[i + 1]]];

        ans = min(ans, cost);
    } while (next_permutation(letters.begin(), letters.end()));

    cout << ans << "\n";
    return 0;
}
