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



int main() {
    // 加速cin/cout的输入输出速度,避免同步带来的延迟
    cin.tie(0)->sync_with_stdio(0);
    ll n,k;
    cin>>n>>k;  // 读取字符串长度n和分组长度k
    vector<char>s(n+1);
    for(ll i=1;i<=n;i++){
        cin>>s[i];  // 读取字符串,下标从1开始存储
    }
    ll res=0;  // 存储最少操作次数的结果
    // 遍历每组的第i个位置(共k个位置,对应所有分组的同位置字符)
    for(ll i=1;i<=k;i++){
        // 哈希表t:统计当前位置i对应的所有字符的出现次数
        // m:记录当前位置中出现次数最多的字符的出现次数
        unordered_map<char,ll>t;
        ll m=0;
        // 遍历所有分组中第i个位置的字符(j从i开始,每次步长为k,覆盖所有组的第i位)
        for(ll j=i;j<=n;j+=k){
            if(t.find(s[j])==t.end()){
                t[s[j]]=1;  // 字符首次出现,初始化次数为1
                m=max(t[s[j]],m);  // 更新最大出现次数
            }
            else{
                t[s[j]]++;  // 字符已存在,次数+1
                m=max(t[s[j]],m);  // 更新最大出现次数
            }
        }
        // 该位置的修改次数 = 总组数(n/k) - 出现次数最多的字符的次数,累加到结果
        res+=n/k-m;
    }
    cout<<res;  // 输出最少操作次数
    return 0;   
}