#include <iostream>
#include <stack>
int i, j, k, A[1002][1002], B[1002][1002], N, M;
void F(int x, int y) {
std::stack <int> a;
std::stack <int> b;
a.push(x);
b.push(y);
do {
x = a.top();
y = b.top();
a.pop();
b.pop();
if (B[x][y] == 1) continue;
B[x][y] = 1;
--k;
if (A[x-1][y] == 4 && B[x-1][y] == 0) {a.push(x-1); b.push(y);};
if (A[x+1][y] == 2 && B[x+1][y] == 0) {a.push(x+1); b.push(y);};
if (A[x][y-1] == 1 && B[x][y-1] == 0) {a.push(x); b.push(y-1);};
if (A[x][y+1] == 3 && B[x][y+1] == 0) {a.push(x); b.push(y+1);};
} while (!a.empty());
}
int main() {
std::cin >> N >> M;
k = N*M;
for (i=1; i<=N; ++i)
for (j=1; j<=M; ++j)
std::cin >> A[i][j];
if ((A[1][1] == 2 || A[1][1] == 3) && B[1][1] == 0) F(1, 1);
if ((A[1][M] == 1 || A[1][M] == 2) && B[1][M] == 0) F(1, M);
if ((A[N][M] == 1 || A[N][M] == 4) && B[N][M] == 0) F(N, M);
if ((A[N][1] == 3 || A[N][1] == 4) && B[N][1] == 0) F(N, 1);
for (i=2; i<M; ++i)
if (A[1][i] == 2 && B[1][i] == 0) F(1, i);
for (i=2; i<M; ++i)
if (A[N][i] == 4 && B[N][i] == 0) F(N, i);
for (i=2; i<N; ++i)
if (A[i][1] == 3 && B[i][1] == 0) F(i, 1);
for (i=2; i<N; ++i)
if (A[i][M] == 1 && B[i][M] == 0) F(i, M);
std::cout << k;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RhY2s+IAogICAgCmludCBpLCBqLCBrLCBBWzEwMDJdWzEwMDJdLCBCWzEwMDJdWzEwMDJdLCBOLCBNOwogICAgCnZvaWQgRihpbnQgeCwgaW50IHkpIHsKICAgIHN0ZDo6c3RhY2sgPGludD4gYTsKICAgIHN0ZDo6c3RhY2sgPGludD4gYjsKICAgIGEucHVzaCh4KTsKICAgIGIucHVzaCh5KTsKICAgIGRvIHsKICAgIAl4ID0gYS50b3AoKTsKICAgIAl5ID0gYi50b3AoKTsKICAgIAlhLnBvcCgpOwogICAgCWIucG9wKCk7CiAgICAgICAgaWYgKEJbeF1beV0gPT0gMSkgY29udGludWU7CiAgICAgICAgQlt4XVt5XSA9IDE7CiAgICAJLS1rOwogICAgICAgIGlmIChBW3gtMV1beV0gPT0gNCAmJiBCW3gtMV1beV0gPT0gMCkge2EucHVzaCh4LTEpOyBiLnB1c2goeSk7fTsKICAgIAlpZiAoQVt4KzFdW3ldID09IDIgJiYgQlt4KzFdW3ldID09IDApIHthLnB1c2goeCsxKTsgYi5wdXNoKHkpO307CiAgICAJaWYgKEFbeF1beS0xXSA9PSAxICYmIEJbeF1beS0xXSA9PSAwKSB7YS5wdXNoKHgpOyBiLnB1c2goeS0xKTt9OwogICAgCWlmIChBW3hdW3krMV0gPT0gMyAmJiBCW3hdW3krMV0gPT0gMCkge2EucHVzaCh4KTsgYi5wdXNoKHkrMSk7fTsKICAgIH0gd2hpbGUgKCFhLmVtcHR5KCkpOwp9CiAgICAKaW50IG1haW4oKSB7CiAgICBzdGQ6OmNpbiA+PiBOID4+IE07CiAgICBrID0gTipNOwogICAgZm9yIChpPTE7IGk8PU47ICsraSkgCiAgICAgICAgZm9yIChqPTE7IGo8PU07ICsraikKICAgICAgICAgICAgc3RkOjpjaW4gPj4gQVtpXVtqXTsKICAgIGlmICgoQVsxXVsxXSA9PSAyIHx8IEFbMV1bMV0gPT0gMykgJiYgQlsxXVsxXSA9PSAwKSBGKDEsIDEpOwogICAgaWYgKChBWzFdW01dID09IDEgfHwgQVsxXVtNXSA9PSAyKSAmJiBCWzFdW01dID09IDApIEYoMSwgTSk7CiAgICBpZiAoKEFbTl1bTV0gPT0gMSB8fCBBW05dW01dID09IDQpICYmIEJbTl1bTV0gPT0gMCkgRihOLCBNKTsKICAgIGlmICgoQVtOXVsxXSA9PSAzIHx8IEFbTl1bMV0gPT0gNCkgJiYgQltOXVsxXSA9PSAwKSBGKE4sIDEpOwogICAgZm9yIChpPTI7IGk8TTsgKytpKQogICAgICAgIGlmIChBWzFdW2ldID09IDIgJiYgQlsxXVtpXSA9PSAwKSBGKDEsIGkpOwogICAgZm9yIChpPTI7IGk8TTsgKytpKQogICAgICAgIGlmIChBW05dW2ldID09IDQgJiYgQltOXVtpXSA9PSAwKSBGKE4sIGkpOwogICAgZm9yIChpPTI7IGk8TjsgKytpKQogICAgICAgIGlmIChBW2ldWzFdID09IDMgJiYgQltpXVsxXSA9PSAwKSBGKGksIDEpOwogICAgZm9yIChpPTI7IGk8TjsgKytpKQogICAgICAgIGlmIChBW2ldW01dID09IDEgJiYgQltpXVtNXSA9PSAwKSBGKGksIE0pOwogICAgc3RkOjpjb3V0IDw8IGs7CiAgICByZXR1cm4gMDsKfQ==