#include <bits/stdc++.h>
using namespace std;
struct vikas {
  long long int l;
  long long int r;
};
vikas dp[100][200];
int main() {
  long long int i, j, k, l, n, m, s, p, q, r, c, x;
  cin >> n >> m;
  char a[100][200], aa[100][200];
  for (i = 0; i < n; i++) cin >> aa[i];
  k = n - 1;
  for (i = 0; i < n; i++) {
    for (j = 0; j < (m + 2); j++)
      if (aa[i][j] == '1') {
        k = i;
        i = n;
        break;
      }
  }
  x = 0;
  for (i = k; i < n; i++) {
    for (j = 0; j < (m + 2); j++) a[x][j] = aa[i][j];
    x++;
  }
  n = x;
  c = 0;
  for (i = 0; i < n; i++) {
    c = 0;
    for (j = 1; j < m + 1; j++) {
      c++;
      if (a[i][j] == '1') {
        for (x = 1; x <= m; x++) dp[i][x].r = m - c + 1;
        break;
      }
    }
    for (j = m; j >= 0; j--) {
      if (a[i][j] == '1') {
        for (x = 1; x <= m; x++) dp[i][x].l = j;
        break;
      }
    }
  }
  long long int left = dp[0][1].l;
  long long int right = dp[0][1].r;
  if (n == 0)
    cout << n;
  else if (n == 1) {
    cout << left;
  } else if (n == 2) {
    left = min((2 * (dp[1][1].l) + left + 1), m + 2 + right);
    cout << left;
  } else {
    p = left;
    left = min((2 * (dp[1][1].l) + left + 1), m + 2 + right);
    right = min((2 * dp[1][1].r) + 1 + right, m + 2 + p);
    for (i = 2; i < n; i++) {
      p = left;
      left = min((2 * (dp[i][1].l) + left + 1), m + 2 + right);
      right = min((2 * dp[i][1].r) + 1 + right, m + 2 + p);
    }
    printf("%lld", left);
  }
  return 0;
}
