#include<bits/stdc++.h>
using namespace std;
#define pb push_back
using ll=long long;
const int inf=10000007;
int n,m,sm,pt,cnt[123][123],f[1050000][21];
char s[100005];
int O[1050000][21];
int dist(int mask, int k, int i)
{
if(k==i) return __builtin_popcount(mask);
if(O[mask][i]==-1) return -1;
return dist((mask&(~(1<<i))),k,O[mask][i]);
}
int do_cham(int mask, int i, int j)
{
int ans=0,bit1=__builtin_popcount(mask);
for(int k=0;k<pt;k++)
{
if(k==j) continue;
int temp=dist(mask,k,i);
if(temp!=-1)
ans+=(bit1+1-temp)*(cnt[j][k]+cnt[k][j]);
}
return ans;
}
int main()
{
freopen("input_file.inp","r",stdin);
cin>>n>>m;
cin>>s[1];
sm=int(s[1]);
for(int i=2;i<=n;i++)
{
cin>>s[i];
if(s[i]!=s[i-1])
cnt[int(s[i-1])-97][int(s[i])-97]++;
sm=max(sm,int(s[i]));
}
pt=sm-96;
for(int mask=0;mask<(1<<pt);mask++)
for(int i=0;i<pt;i++)
f[mask][i]=inf;
for(int mask=0;mask<(1<<pt)-1;mask++)
{
if(!mask)
{
for(int i=0;i<pt;i++)
{
f[mask|(1<<i)][i]=0;
O[mask|(1<<i)][i]=-1;
}
continue;
}
for(int i=0;i<pt;i++)
{
for(int j=0;j<pt;j++)
{
if(i==j) continue;
if((mask&(1<<i)) && !(mask&(1<<j)))
{
int dc=do_cham(mask,i,j);
if(f[mask][i]+dc<f[mask|(1<<j)][j])
{
f[mask|(1<<j)][j]=f[mask][i]+dc;
O[mask|(1<<j)][j]=i;
}
}
}
}
}
int ans=inf;
for(int i=0;i<pt;i++)
ans=min(ans,f[(1<<pt)-1][i]);
cout<<ans;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBwYiBwdXNoX2JhY2sKdXNpbmcgbGw9bG9uZyBsb25nOwoKY29uc3QgaW50IGluZj0xMDAwMDAwNzsKCmludCBuLG0sc20scHQsY250WzEyM11bMTIzXSxmWzEwNTAwMDBdWzIxXTsKY2hhciBzWzEwMDAwNV07CmludCBPWzEwNTAwMDBdWzIxXTsKCmludCBkaXN0KGludCBtYXNrLCBpbnQgaywgaW50IGkpCnsKICAgIGlmKGs9PWkpIHJldHVybiBfX2J1aWx0aW5fcG9wY291bnQobWFzayk7CiAgICBpZihPW21hc2tdW2ldPT0tMSkgcmV0dXJuIC0xOwogICAgcmV0dXJuIGRpc3QoKG1hc2smKH4oMTw8aSkpKSxrLE9bbWFza11baV0pOwp9CmludCBkb19jaGFtKGludCBtYXNrLCBpbnQgaSwgaW50IGopCnsKICAgIGludCBhbnM9MCxiaXQxPV9fYnVpbHRpbl9wb3Bjb3VudChtYXNrKTsKICAgIGZvcihpbnQgaz0wO2s8cHQ7aysrKQogICAgewogICAgICAgIGlmKGs9PWopIGNvbnRpbnVlOwogICAgICAgIGludCB0ZW1wPWRpc3QobWFzayxrLGkpOwogICAgICAgIGlmKHRlbXAhPS0xKQogICAgICAgICAgICBhbnMrPShiaXQxKzEtdGVtcCkqKGNudFtqXVtrXStjbnRba11bal0pOwogICAgfQogICAgcmV0dXJuIGFuczsKfQppbnQgbWFpbigpCnsKICAgIGZyZW9wZW4oImlucHV0X2ZpbGUuaW5wIiwiciIsc3RkaW4pOwogICAgY2luPj5uPj5tOwogICAgY2luPj5zWzFdOwogICAgc209aW50KHNbMV0pOwogICAgZm9yKGludCBpPTI7aTw9bjtpKyspCiAgICB7CiAgICAgICAgY2luPj5zW2ldOwogICAgICAgIGlmKHNbaV0hPXNbaS0xXSkKICAgICAgICAgICAgY250W2ludChzW2ktMV0pLTk3XVtpbnQoc1tpXSktOTddKys7CiAgICAgICAgc209bWF4KHNtLGludChzW2ldKSk7CiAgICB9CiAgICBwdD1zbS05NjsKICAgIGZvcihpbnQgbWFzaz0wO21hc2s8KDE8PHB0KTttYXNrKyspCiAgICAgICAgZm9yKGludCBpPTA7aTxwdDtpKyspCiAgICAgICAgICAgIGZbbWFza11baV09aW5mOwogICAgZm9yKGludCBtYXNrPTA7bWFzazwoMTw8cHQpLTE7bWFzaysrKQogICAgewogICAgICAgIGlmKCFtYXNrKQogICAgICAgIHsKICAgICAgICAgICAgZm9yKGludCBpPTA7aTxwdDtpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZbbWFza3woMTw8aSldW2ldPTA7CiAgICAgICAgICAgICAgICBPW21hc2t8KDE8PGkpXVtpXT0tMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgZm9yKGludCBpPTA7aTxwdDtpKyspCiAgICAgICAgewogICAgICAgICAgICBmb3IoaW50IGo9MDtqPHB0O2orKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoaT09aikgY29udGludWU7CiAgICAgICAgICAgICAgICBpZigobWFzayYoMTw8aSkpICYmICEobWFzayYoMTw8aikpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGludCBkYz1kb19jaGFtKG1hc2ssaSxqKTsKICAgICAgICAgICAgICAgICAgICBpZihmW21hc2tdW2ldK2RjPGZbbWFza3woMTw8aildW2pdKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZlttYXNrfCgxPDxqKV1bal09ZlttYXNrXVtpXStkYzsKICAgICAgICAgICAgICAgICAgICAgICAgT1ttYXNrfCgxPDxqKV1bal09aTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBpbnQgYW5zPWluZjsKICAgIGZvcihpbnQgaT0wO2k8cHQ7aSsrKQogICAgICAgIGFucz1taW4oYW5zLGZbKDE8PHB0KS0xXVtpXSk7CiAgICBjb3V0PDxhbnM7Cn0K