#include <stdio.h>
#include <queue>
using namespace std;
const int N=1e3+10;
int main(){
    int n,m,a[N][N],pos=0,l[N],r[N],now;
    bool f;
    queue<int> ql[3],qr[3],nl[2],nr[2];
    scanf("%d%d",&m,&n);
    for(int i=0;i<n;i++)for(int j=0;j<m;j++){
        scanf("%d",&a[i][j]);
        if(a[i][j]==1){
            pos++;
            l[i]++;
            r[j]++;
        }
        else {
            l[i]--;
            r[j]--;
            pos--;
        }
    }
    for(int i=0;i<n;i++){
        if(l[i]==-1)ql[0].push(i);
        else if(l[i]==0)ql[1].push(i);
        else if(l[i]==1)ql[2].push(i);
        else {
            printf("no\n");
            return 0;
        }
    }
    for(int i=0;i<m;i++){
        if(r[i]==-1)qr[0].push(i);
        else if(r[i]==0)qr[1].push(i);
        else if(r[i]==1)qr[2].push(i);
        else {
            printf("no\n");
            return 0;
        }
    }
    if((n&1)&&(m&1)){
        if(pos==1){
            if(!ql[1].empty()||ql[0].size()!=ql[2].size()-1||!qr[1].empty()||qr[0].size()!=qr[2].size()-1){
                printf("no\n");
                return 0;
            }
            now=2;
            for(int i=0;i<n;i++){
                l[i]=ql[now].front();
                ql[now].pop();
                now=2-now;
            }
            now=2;
            for(int i=0;i<m;i++){
                r[i]=qr[now].front();
                qr[now].pop();
                now=2-now;
            }
            pos=1;
            for(int i=0;i<n;i++){
                now=pos;
                for(int j=0;j<m;j++){
                    if(a[l[i]][r[j]]!=now){
                        printf("no\n");
                        return 0;
                    }
                    now=1-now;
                }
                pos=1-pos;
            }
        }
        else if(pos==-1){
            if(!ql[1].empty()||ql[0].size()!=ql[2].size()+1||!qr[1].empty()||qr[0].size()!=qr[2].size()+1){
                printf("no\n");
                return 0;
            }
            now=0;
            for(int i=0;i<n;i++){
                l[i]=ql[now].front();
                ql[now].pop();
                now=2-now;
            }
            now=0;
            for(int i=0;i<m;i++){
                r[i]=qr[now].front();
                qr[now].pop();
                now=2-now;
            }
            pos=0;
            for(int i=0;i<n;i++){
                now=pos;
                for(int j=0;j<m;j++){
                    if(a[l[i]][r[j]]!=now){
                        printf("no\n");
                        return 0;
                    }
                    now=1-now;
                }
                pos=1-pos;
            }
        }
        else{
            printf("no\n");
            return 0;
        }
    }
    else{
        if(pos==0){
            if(n&1){
                if(!qr[1].empty()||qr[0].size()!=qr[2].size()||!ql[0].empty()||!ql[2].empty()){
                    printf("no\n");
                    return 0;
                }
                for(int i=0;i<n;i++)nl[a[i][0]].push(i);
                now=nl[0].size()>nl[1].size()?0:1;
                for(int i=0;i<n;i++){
                    l[i]=nl[now].front();
                    nl[now].pop();
                    now=1-now;
                }
                now=2;
                for(int i=0;i<m;i++){
                    r[i]=qr[now].front();
                    qr[now].pop();
                    now=2-now;
                }
                pos=a[l[0]][r[0]];
                for(int i=0;i<n;i++){
                    now=pos;
                    for(int j=0;j<m;j++){
                        if(now!=a[l[i]][r[j]]){
                            printf("no\n");
                            return 0;
                        }
                        now=1-now;
                    }
                    pos=1-pos;
                }
                
            }
            else if(m&1){
                if(!ql[1].empty()||ql[0].size()!=ql[2].size()||!qr[0].empty()||!qr[2].empty()){
                    printf("no\n");
                    return 0;
                }
                for(int i=0;i<m;i++)nr[a[0][i]].push(i);
                now=nr[0].size()>nr[1].size()?0:1;
                for(int i=0;i<m;i++){
                    r[i]=nr[now].front();
                    nr[now].pop();
                    now=1-now;
                }
                now=2;
                for(int i=0;i<n;i++){
                    l[i]=ql[now].front();
                    ql[now].pop();
                    now=2-now;
                }
                pos=a[l[0]][r[0]];
                
                for(int i=0;i<n;i++){
                    now=pos;
                    for(int j=0;j<m;j++){
                        if(now!=a[l[i]][r[j]]){
                            printf("no\n");
                            return 0;
                        }
                        now=1-now;
                    }
                    pos=1-pos;
                }
                
            }
            else{
                if(!ql[0].empty()||!ql[2].empty()||!qr[0].empty()||!qr[2].empty()){
                    printf("no\n");
                    return 0;
                }
                for(int i=0;i<n;i++)nl[a[i][0]].push(i);
                for(int i=0;i<m;i++)nr[a[0][i]].push(i);
                now=1;
                for(int i=0;i<n;i++){
                    l[i]=nl[now].front();
                    nl[now].pop();
                    now=1-now;
                }
                for(int i=0;i<m;i++){
                    r[i]=nr[now].front();
                    nr[now].pop();
                    now=1-now;
                }
                pos=1;
                for(int i=0;i<n;i++){
                    now=pos;
                    for(int j=0;j<m;j++){
                        if(now!=a[l[i]][r[j]]){
                            printf("no\n");
                            return 0;
                        }
                        now=1-now;
                    }
                    pos=1-pos;
                }
            }
        }
        else{
            printf("no\n");
            return 0;
        }
    }
    printf("yes\n");
}


Measured memory_bytes: 6572