#include <iostream>
#include <string>
#include <queue>
using namespace std;
typedef pair<int, int> P;

int main()
{
    int h, w;
    cin >> h >> w;
    string s[102];
    for(int i = 0; i < h; i++) cin >> s[i];
    bool used[102][102];
    for(int i = 0; i < h; i++){
        for(int j = 0; j < w; j++) used[i][j] = false;
    }
    queue<P> que;
    que.push(P(0, 0));
    while(que.size()){
        P p = que.front();
        que.pop();
        char r, l, f, b, u;
        if(p.first % 4){
            f = '2';
            b = '5';
        }
        else{
            f = '5';
            b = '2';
        }
        if(p.second % 4){
            r = '4';
            l = '3';
        }
        else{
            r = '3';
            l = '4';
        }
        if((p.first + p.second) % 4){
            u = '6';
        }
        else{
            u = '1';
        }
        if(p.first == h - 1 && p.second == w - 1){
            cout << "YES" << endl;
            return 0;
        }
        if(p.first == h - 1 && p.second == w - 2){
            if(s[p.first][p.second + 1] == r){
                cout << "YES" << endl;
                return 0;
            }
        }
        if(p.first == h - 2 && p.second == w - 1){
            if(s[p.first + 1][p.second] == b){
                cout << "YES" << endl;
                return 0;
            }
        }
        if(p.first + 2 < h && !used[p.first + 2][p.second] && 
           s[p.first + 1][p.second] == b && s[p.first + 2][p.second] == u){
            used[p.first + 2][p.second] = true;
            que.push(P(p.first + 2, p.second));
        }
        if(p.second + 2 < w && !used[p.first][p.second + 2] &&
           s[p.first][p.second + 1] == r && s[p.first][p.second + 2] == u){
            used[p.first][p.second + 2] = true;
            que.push(P(p.first, p.second + 2));
        }
        if(p.first - 2 >= 0 && !used[p.first - 2][p.second] &&
           s[p.first - 1][p.second] == f && s[p.first - 2][p.second] == u){
            used[p.first - 2][p.second] = true;
            que.push(P(p.first - 2, p.second));
        }
        if(p.second - 2 < w && !used[p.first][p.second - 2] &&
           s[p.first][p.second - 1] == l && s[p.first][p.second - 2] == u){
            used[p.first][p.second - 2] = true;
            que.push(P(p.first, p.second - 2));
        }
    }
    cout << "NO" << endl;
}
