#include <bits/stdc++.h>
using namespace std;
int minimal=1000000000,n,m;

void rek(int i,int j,set<pair<int,int>> putanja,vector<vector<int>>& a){

    if (i+1<n){
        putanja.insert(make_pair(i+1,j));
        rek(i+1,j,putanja,a);
        putanja.erase(make_pair(i+1,j));
    }
    if (j+1<m){
        putanja.insert(make_pair(i,j+1));
        rek(i,j+1,putanja,a);
        putanja.erase(make_pair(i,j+1));
    }
    if ((i+1==n) and (j+1==m)){
        int rez=0;
        for (int i=0;i<n;i++){
            for (int j=0;j<m;j++){
                if (putanja.find(make_pair(i,j))==putanja.end()) {
                    bool dolekraj=false,desnokraj=false;
                    int desno=0,dole=0;
                    for (int k=j;k<m;k++){
                        if (putanja.find(make_pair(i,k))!=putanja.end()){
                            desnokraj=true;
                            break;
                        }
                        desno++;
                    }

                    for (int k=i;k<n;k++){
                        if (putanja.find(make_pair(k,j))!=putanja.end()){
                            dolekraj=true;
                            break;
                        }
                        dole++;
                    }
                    int min_put;
                    if ((dolekraj) and (desnokraj) and (desno>=dole)) min_put=dole;
                    else if ((dolekraj) and (desnokraj) and (dole>desno)) min_put=desno;
                    else if (dolekraj) min_put=dole;
                    else min_put=desno;
                    rez+=min_put*a[i][j];



                }


            }
        }

  /*      for (int i=0;i<n;i++){
            for (int j=0;j<m;j++){
                cout<<putanja[i][j]<<" ";
            }
            cout<<endl;
        }

        cout<<rez<<endl<<endl;
    */   if (rez<minimal) minimal=rez;
        return;
    }

}



int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin>>n>>m;
    vector<vector<int>> a(n,vector<int>(m));
    set<pair<int,int> > put;
   // vector<vector<bool>> put(n,vector<bool>(m,false));
    for (int i=0;i<n;i++){
        for (int j=0;j<m;j++){
            cin>>a[i][j];
        }
    }
    if (n*m<25){
        put.insert(make_pair(0,0));
        rek(0,0,put,a);
        cout<<minimal;
        return 0;
    }

    vector<long long> gore(m,0),dole(m,0);
    gore[0]=1ll*(a[0][0]);
    dole[0]=1ll*(a[1][0]);

    for (int i=1;i<m;i++){

        gore[i]+=gore[i-1]+1ll*(a[0][i]);
        dole[i]+=dole[i-1]+1ll*(a[1][i]);

    }
    long long gore_zbir=0,dole_zbir=0;
    long long rezultat=1e15;
    for (int i=0;i<m;i++){

        gore_zbir=gore[m-1]-gore[i];
        if (i!=0) dole_zbir+=dole[i-1];
        if ((gore_zbir+dole_zbir)<rezultat) rezultat=gore_zbir+dole_zbir;

    }


    return 0;
}