#include <bits/stdc++.h>
using namespace std;
int tab[1000][1000];
int rozklad[100];
pair<int, int> koszt[20];
bool p = false;
bool d = false;
long long wynik = 1000000009, pomocnicza;
int main() {
  int n, m, x, s, o, koniec = 1;
  char c;
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m + 2; j++) {
      scanf(" %c", &c);
      if (c == '0')
        tab[i][j] = 0;
      else
        tab[i][j] = 1;
      if (tab[i][j] == 1) {
        d = true;
        o = j;
        if (p == false) {
          s = j;
          p = true;
        }
      }
    }
    if (p == false) {
      o = 1;
      s = m + 2;
    }
    p = false;
    koszt[i].first = (o - 1) * 2;
    koszt[i].second = (m + 2 - s) * 2;
    if (i == koniec) {
      koszt[i].first = o - 1;
      koszt[i].second = m + 2 - s;
    }
    if (d == false) {
      koniec++;
    }
  }
  if (d == false) {
    cout << 0;
    return 0;
  }
  x = 1 << (n - 1);
  rozklad[n] = 0;
  for (int i = 0; i < x; i++) {
    s = i;
    pomocnicza = 0;
    for (int j = n - 1; j > 0; j--) {
      rozklad[j] = s % 2;
      s /= 2;
    }
    for (int j = n - 1; j > 0; j--) {
      if (rozklad[j + 1] == 0 && rozklad[j] == 0)
        pomocnicza += koszt[j + 1].first;
      if (rozklad[j + 1] == 1 && rozklad[j] == 1)
        pomocnicza += koszt[j + 1].second;
      if ((rozklad[j + 1] == 1 && rozklad[j] == 0) ||
          (rozklad[j + 1] == 0 && rozklad[j] == 1))
        pomocnicza += m + 1;
    }
    if (rozklad[1] == 1)
      pomocnicza += koszt[1].second;
    else
      pomocnicza += koszt[1].first;
    if (pomocnicza < wynik) {
      wynik = pomocnicza;
    }
  }
  cout << wynik + n - koniec;
  return 0;
}
