package main
import (
"bufio"
"fmt"
"os"
)
func min(a, b int) int {
if a < b {
return a
}
return b
}
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n, m int
if _, err := fmt.Fscan(in, &n, &m); err != nil {
return
}
floors := make([]string, n)
for i := 0; i < n; i++ {
fmt.Fscan(in, &floors[i])
}
l := make([]int, n+1)
r := make([]int, n+1)
last := 0
for i := 1; i <= n; i++ {
s := floors[n-i]
li, ri := m+1, 0
for j := 1; j <= m; j++ {
if s[j] == '1' {
if j < li {
li = j
}
if j > ri {
ri = j
}
}
}
l[i], r[i] = li, ri
if ri > 0 {
last = i
}
}
if last == 0 {
fmt.Fprintln(out, 0)
return
}
const inf = int(1e9)
dpL, dpR := 0, inf
for i := 1; i < last; i++ {
ndpL := min(dpL+2*r[i]+1, dpR+m+2)
ndpR := min(dpR+2*(m+1-l[i])+1, dpL+m+2)
dpL, dpR = ndpL, ndpR
}
ans := min(dpL+r[last], dpR+(m+1-l[last]))
fmt.Fprintln(out, ans)
}