import java.io.*;
import java.util.*;
public class matrixfraud_xiaowuc1 {
  public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
    StringTokenizer st = new StringTokenizer(br.readLine());
    int r = Integer.parseInt(st.nextToken());
    int c = Integer.parseInt(st.nextToken());
    char[][] g = new char[r][c];
    for(int i = 0; i < r; i++) {
      String s = br.readLine();
      for(int j = 0; j < c; j++) g[i][j] = s.charAt(j);
    }
    if(c > r) {
      char[][] ng = new char[c][r];
      for(int i = 0; i < r; i++) for(int j = 0; j < c; j++) ng[j][i] = g[i][j];
      g = ng;
      r ^= c; c ^= r; r ^= c;
    }
    int[][] psum = new int[r][c+1];
    for(int i = 0; i < r; i++) for(int j = 0; j < c; j++) psum[i][j+1] = psum[i][j] + (g[i][j] - '0');
    int[][][] dp = new int[2][c][c];
    for(int i = 0; i < c; i++) Arrays.fill(dp[0][i], 1 << 30);
    for(int i = 0; i < c; i++) Arrays.fill(dp[1][i], 1 << 30);
    {
      for(int j = 0; j < c; j++) {
        dp[0][0][j] = getops(psum, 0, 0, j);
      }
    }
    for(int i = 1; i < r; i++) {
      int cidx = i%2;
      int oidx = cidx ^ 1;
      for(int j = 0; j < c; j++) Arrays.fill(dp[cidx][j], 1 << 30);
      int[] coldp = new int[c];
      Arrays.fill(coldp, 1 << 30);
      for(int a = 0; a < c; a++) {
        for(int b = a; b < c; b++) coldp[b] = Math.min(coldp[b], dp[oidx][a][b]);
        int best = coldp[Math.max(0, a-1)];
        for(int b = a; b < c; b++) {
          best = Math.min(best, coldp[b]);
          dp[cidx][a][b] = best + getops(psum, i, a, b);
        }
      }
    }
    int ret = 1 << 30;
    int fidx = 1 ^ (r%2);
    for(int a = 0; a < c; a++) {
      ret = Math.min(ret, dp[fidx][a][c-1]);
    }
    pw.println(ret);
    pw.close();
  }
  public static int getops(int[][] psum, int r, int a, int b) {
    int zeroinside = (b-a+1) - (psum[r][b+1] - psum[r][a]);
    int oneoutside = psum[r][a] + (psum[r][psum[r].length-1] - psum[r][b+1]);
    return zeroinside + oneoutside;  
  }
}
