← Home
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)
}