#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1000005;
int n, k;
LL ans = 0;
char a[N], b[N];
#define mp make_pair
multiset<pair<int, int>> s[2];
int main() {
scanf("%d%d%s%s", &n, &k, a + 1, b + 1);
for (int i = 1; i <= n; i++)
if (a[i] != b[i]) {
int x = a[i] - '0';
if (s[!x].empty()) s[x].insert(mp(i % k, i));
else {
auto it = s[!x].lower_bound(mp(i % k, 0));
if (it == s[!x].end()) it = s[!x].begin();
ans += (i - (it -> second) - 1) / k + 1, s[!x].erase(it);
}
}
printf("%lld\n", ans);
return 0;
}
#include<bits/stdc++.h>
#define int long long
#define mp make_pair
using namespace std;
const int N=1e6+10;
multiset<pair<int,int> >s[2];
char a[N],b[N];
signed main(){
int n,sum=0,k,x=0,y=0;
scanf("%lld%lld%s%s", &n, &k, a+1, b+1);
for(int i=1;i<=n;i++){
if(a[i]!=b[i]){
int x=a[i]-'0';
if(s[!x].empty())s[x].insert(mp(i%k,i));
else{
auto it=s[!x].lower_bound(mp(i%k,0));
if(it==s[!x].end())it=s[!x].begin();
sum+=(i-(it->second)-1)/k+1;
s[!x].erase(it);
}
}
}
cout<<sum;
return 0;
}