#include <iostream>
int i, j, k, A[1004004], B[1004004], N, M;
void print() {
std::cout << "______A______" << '\n';
for (int i=0; i<=N+1; i++) {
for (int j=0; j<=M+1; j++)
std::cout << A[i*(M+2)+j] << " ";
std::cout << '\n';
}
std::cout << "______B______" << '\n';
for (int i=0; i<=N+1; i++) {
for (int j=0; j<=M+1; j++)
std::cout << B[i*(M+2)+j] << " ";
std::cout << '\n';
}
std::cout << '\n';
}
void F(int x, int y) {
B[x*M+y] = 1;
--k;
if (A[(x-1)*(M+2)+y] == 4 && B[(x-1)*(M+2)+y] == 0) F(x-1, y);
if (A[(x+1)*(M+2)+y] == 2 && B[(x+1)*(M+2)+y] == 0) F(x+1, y);
if (A[x*(M+2)+y-1] == 1 && B[x*(M+2)+y-1] == 0) F(x, y-1);
if (A[x*(M+2)+y+1] == 3 && B[x*(M+2)+y+1] == 0) F(x, y+1);
}
int main() {
std::cin >> N >> M;
k = N*M;
for (i=0; i<1004004; ++i)
A[i] = B[i] = 0;
print();
for (i=1; i<=N; ++i)
for (j=1; j<=M; ++j)
std::cin >> A[i*M+j];
print();
if (A[(M+2)+1] == 2 || A[(M+2)+1] == 3) F(1, 1);
print();
if (A[(M+2)+M] == 1 || A[(M+2)+M] == 2) F(1, M);
print();
if (A[N*(M+2)+M] == 1 || A[N*(M+2)+M] == 4) F(N, M);
print();
if (A[N*(M+2)+1] == 3 || A[N*(M+2)+1] == 4) F(N, 1);
print();
for (i=2; i<M; ++i)
if (A[(M+2)+i] == 2) F(1, i);
for (i=2; i<M; ++i)
if (A[N*(M+2)+i] == 4) F(N, i);
for (i=2; i<N; ++i)
if (A[i*(M+2)+1] == 3) F(i, 1);
for (i=2; i<N; ++i)
if (A[i*(M+2)+M] == 1) F(i, M);
std::cout << k;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogICAgCmludCBpLCBqLCBrLCBBWzEwMDQwMDRdLCBCWzEwMDQwMDRdLCBOLCBNOwoKdm9pZCBwcmludCgpIHsKCXN0ZDo6Y291dCA8PCAiX19fX19fQV9fX19fXyIgPDwgJ1xuJzsKCWZvciAoaW50IGk9MDsgaTw9TisxOyBpKyspIHsKCQlmb3IgKGludCBqPTA7IGo8PU0rMTsgaisrKQoJCQlzdGQ6OmNvdXQgPDwgQVtpKihNKzIpK2pdIDw8ICIgIjsKCQlzdGQ6OmNvdXQgPDwgJ1xuJzsKCX0KCXN0ZDo6Y291dCA8PCAiX19fX19fQl9fX19fXyIgPDwgJ1xuJzsKCWZvciAoaW50IGk9MDsgaTw9TisxOyBpKyspIHsKCQlmb3IgKGludCBqPTA7IGo8PU0rMTsgaisrKQoJCQlzdGQ6OmNvdXQgPDwgQltpKihNKzIpK2pdIDw8ICIgIjsKCQlzdGQ6OmNvdXQgPDwgJ1xuJzsKCX0KCXN0ZDo6Y291dCA8PCAnXG4nOwoJCQkKfQogICAgCnZvaWQgRihpbnQgeCwgaW50IHkpIHsKICAgIEJbeCpNK3ldID0gMTsKICAgIC0tazsKICAgIGlmIChBWyh4LTEpKihNKzIpK3ldID09IDQgJiYgQlsoeC0xKSooTSsyKSt5XSA9PSAwKSBGKHgtMSwgeSk7CiAgICBpZiAoQVsoeCsxKSooTSsyKSt5XSA9PSAyICYmIEJbKHgrMSkqKE0rMikreV0gPT0gMCkgRih4KzEsIHkpOwogICAgaWYgKEFbeCooTSsyKSt5LTFdID09IDEgJiYgQlt4KihNKzIpK3ktMV0gPT0gMCkgRih4LCB5LTEpOwogICAgaWYgKEFbeCooTSsyKSt5KzFdID09IDMgJiYgQlt4KihNKzIpK3krMV0gPT0gMCkgRih4LCB5KzEpOwp9CiAgICAKaW50IG1haW4oKSB7CiAgICBzdGQ6OmNpbiA+PiBOID4+IE07CiAgICBrID0gTipNOwogICAgZm9yIChpPTA7IGk8MTAwNDAwNDsgKytpKQogICAgCUFbaV0gPSBCW2ldID0gMDsKICAgICAgICAgICAKICAgIHByaW50KCk7CiAgICAKICAgIGZvciAoaT0xOyBpPD1OOyArK2kpIAogICAgICAgIGZvciAoaj0xOyBqPD1NOyArK2opCiAgICAgICAgICAgIHN0ZDo6Y2luID4+IEFbaSpNK2pdOwogICAgICAgICAgICAKICAgIHByaW50KCk7CiAgICAKICAgIGlmIChBWyhNKzIpKzFdID09IDIgfHwgQVsoTSsyKSsxXSA9PSAzKSBGKDEsIDEpOwogICAgICAgICAgICAKICAgIHByaW50KCk7CiAgICAKICAgIGlmIChBWyhNKzIpK01dID09IDEgfHwgQVsoTSsyKStNXSA9PSAyKSBGKDEsIE0pOwogICAgICAgICAgICAKICAgIHByaW50KCk7CiAgICAKICAgIGlmIChBW04qKE0rMikrTV0gPT0gMSB8fCBBW04qKE0rMikrTV0gPT0gNCkgRihOLCBNKTsKICAgICAgICAgICAgCiAgICBwcmludCgpOwogICAgCiAgICBpZiAoQVtOKihNKzIpKzFdID09IDMgfHwgQVtOKihNKzIpKzFdID09IDQpIEYoTiwgMSk7CiAgICAgICAgICAgIAogICAgcHJpbnQoKTsKICAgIAogICAgZm9yIChpPTI7IGk8TTsgKytpKQogICAgICAgIGlmIChBWyhNKzIpK2ldID09IDIpIEYoMSwgaSk7CiAgICBmb3IgKGk9MjsgaTxNOyArK2kpCiAgICAgICAgaWYgKEFbTiooTSsyKStpXSA9PSA0KSBGKE4sIGkpOwogICAgZm9yIChpPTI7IGk8TjsgKytpKQogICAgICAgIGlmIChBW2kqKE0rMikrMV0gPT0gMykgRihpLCAxKTsKICAgIGZvciAoaT0yOyBpPE47ICsraSkKICAgICAgICBpZiAoQVtpKihNKzIpK01dID09IDEpIEYoaSwgTSk7CiAgICBzdGQ6OmNvdXQgPDwgazsKICAgIHJldHVybiAwOwp9