#include <bits/stdc++.h>
using namespace std;
int N, K;
const long long inf = (1LL << 60);
vector<pair<int, long long> > S[200005];
struct {
  void build(int l, int r, int id) {
    if (l == r) {
      st[id] = inf;
      return;
    }
    int m = (l + r) / 2;
    build(l, m, id * 2);
    build(m + 1, r, id * 2 + 1);
    up(id);
  }
  void up(int id) { st[id] = min(st[id * 2], st[id * 2 + 1]); }
  long long que(int L, int R, int l, int r, int id) {
    if (l >= L && r <= R) return st[id];
    if (l > R || r < L) return inf;
    int m = (l + r) / 2;
    return min(que(L, R, l, m, id * 2), que(L, R, m + 1, r, id * 2 + 1));
  }
  void mod(int p, long long x, int l, int r, int id) {
    if (p == l && p == r) {
      st[id] = x;
      return;
    }
    int m = (l + r) / 2;
    if (p <= m)
      mod(p, x, l, m, id * 2);
    else
      mod(p, x, m + 1, r, id * 2 + 1);
    up(id);
  }
  long long st[200005 * 4];
} segt;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> N >> K;
  string str;
  cin >> str;
  for (int i = 1; i <= N; i++) S[i].push_back(make_pair(i, i));
  for (int i = 1; i <= N; i++)
    if (str[i - 1] == '1') {
      int l = max(1, i - K), r = min(N, i + K);
      S[r].push_back(make_pair(l, i));
    }
  segt.build(0, N, 1);
  segt.mod(0, 0, 0, N, 1);
  long long ans;
  for (int i = 1; i <= N; i++) {
    long long mn = inf;
    for (pair<int, long long> si : S[i]) {
      int l = si.first;
      long long v = si.second;
      long long res = segt.que(l - 1, i - 1, 0, N, 1);
      mn = min(mn, res + v);
    }
    if (i == N)
      ans = mn;
    else
      segt.mod(i, mn, 0, N, 1);
  }
  cout << ans << '\n';
  return 0;
}
