#include <bits/stdc++.h>
#define ll long long
#define ft first
#define sc second
#define el '\n'
#define boost ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define file(name) freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout)
#define pb push_back
#define all(x) (x).begin(),(x).end()
using namespace std;
const ll N = 1000;
ll n, m, a[N + 1][N + 1];
bool SUKUNA[N + 1][N + 1], GOJO[N + 1][N + 1];
pair<ll, ll> sukuna, gojo;
vector<pair<ll, ll>> d = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}, {-1, -1}, {1, -1}, {-1, 1}, {1, 1}};
pair<pair<ll, ll>, pair<ll, ll>> AMON[N + 5];
void read() {
cin >> n >> m;
for(ll i = 1; i <= n; i ++) {
for(ll j = 1; j <= m; j ++) {
cin >> a[i][j];
if(sukuna.ft == 0 && (a[i][j] == 1 || a[i][j] == 3)) {
sukuna = {i, j};
}
if(gojo.ft == 0 && (a[i][j] == 2 || a[i][j] == 3)) {
gojo = {i, j};
}
}
}
}
void dfsSUKUNA(ll x, ll y) {
SUKUNA[x][y] = 1;
for(auto [i, j] : d) {
ll new_i = i + x;
ll new_j = j + y;
if(new_i < 1 || new_i > n || new_j < 1 || new_j > m
|| a[new_i][new_j] == 2 || a[new_i][new_j] == 0
|| SUKUNA[new_i][new_j]) continue;
dfsSUKUNA(new_i, new_j);
}
}
void dfsGOJO(ll x, ll y) {
GOJO[x][y] = 1;
for(auto &[i, j] : d) {
ll new_i = i + x;
ll new_j = j + y;
if(new_i < 1 || new_i > n || new_j < 1 || new_j > m
|| a[new_i][new_j] == 1 || a[new_i][new_j] == 0
|| GOJO[new_i][new_j]) continue;
dfsGOJO(new_i, new_j);
}
}
void solve() {
dfsSUKUNA(sukuna.ft, sukuna.sc);
for(ll i = 1; i <= n; i ++) {
ll dau = 0, cuoi = 0;
for(ll j = 1; j <= m; j ++) {
if(SUKUNA[i][j]) {
dau = j;
break;
}
}
for(ll j = m; j >= 1; j --) {
if(SUKUNA[i][j]) {
cuoi = j;
break;
}
}
for(ll j = dau; j <= cuoi; j ++) {
SUKUNA[i][j] = 1;
}
}
dfsGOJO(gojo.ft, gojo.sc);
for(ll i = 1; i <= n; i ++) {
ll dau = 0, cuoi = 0;
for(ll j = 1; j <= m; j ++) {
if(GOJO[i][j]) {
dau = j;
break;
}
}
for(ll j = m; j >= 1; j --) {
if(GOJO[i][j]) {
cuoi = j;
break;
}
}
for(ll j = dau; j <= cuoi; j ++) {
GOJO[i][j] = 1;
}
}
ll cnt = 0;
for(ll i = 1; i <= n; i ++) {
for(ll j = 1; j <= m; j ++) {
if(SUKUNA[i][j] && GOJO[i][j]) cnt ++;
}
}
cout << cnt;
}
void write() {
}
int main() {
boost;
//file();
read();
solve();
write();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZnQgZmlyc3QKI2RlZmluZSBzYyBzZWNvbmQKI2RlZmluZSBlbCAnXG4nCiNkZWZpbmUgYm9vc3QgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApCiNkZWZpbmUgZmlsZShuYW1lKSBmcmVvcGVuKG5hbWUiLmlucCIsICJyIiwgc3RkaW4pOyBmcmVvcGVuKG5hbWUiLm91dCIsICJ3Iiwgc3Rkb3V0KQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGFsbCh4KSAoeCkuYmVnaW4oKSwoeCkuZW5kKCkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgbGwgTiA9IDEwMDA7CmxsIG4sIG0sIGFbTiArIDFdW04gKyAxXTsKYm9vbCBTVUtVTkFbTiArIDFdW04gKyAxXSwgR09KT1tOICsgMV1bTiArIDFdOwpwYWlyPGxsLCBsbD4gc3VrdW5hLCBnb2pvOwp2ZWN0b3I8cGFpcjxsbCwgbGw+PiBkID0ge3swLCAxfSwgezEsIDB9LCB7LTEsIDB9LCB7MCwgLTF9LCB7LTEsIC0xfSwgezEsIC0xfSwgey0xLCAxfSwgezEsIDF9fTsKcGFpcjxwYWlyPGxsLCBsbD4sIHBhaXI8bGwsIGxsPj4gQU1PTltOICsgNV07Cgp2b2lkIHJlYWQoKSB7CiAgICBjaW4gPj4gbiA+PiBtOwoKICAgIGZvcihsbCBpID0gMTsgaSA8PSBuOyBpICsrKSB7CiAgICAgICAgZm9yKGxsIGogPSAxOyBqIDw9IG07IGogKyspIHsKICAgICAgICAgICAgY2luID4+IGFbaV1bal07CiAgICAgICAgICAgIGlmKHN1a3VuYS5mdCA9PSAwICYmIChhW2ldW2pdID09IDEgfHwgYVtpXVtqXSA9PSAzKSkgewogICAgICAgICAgICAgICAgc3VrdW5hID0ge2ksIGp9OwogICAgICAgICAgICB9IAogICAgICAgICAgICBpZihnb2pvLmZ0ID09IDAgJiYgKGFbaV1bal0gPT0gMiB8fCBhW2ldW2pdID09IDMpKSB7CiAgICAgICAgICAgICAgICBnb2pvID0ge2ksIGp9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIGRmc1NVS1VOQShsbCB4LCBsbCB5KSB7CiAgICBTVUtVTkFbeF1beV0gPSAxOwoKICAgIGZvcihhdXRvIFtpLCBqXSA6IGQpIHsKICAgICAgICBsbCBuZXdfaSA9IGkgKyB4OwogICAgICAgIGxsIG5ld19qID0gaiArIHk7CiAgICAgICAgaWYobmV3X2kgPCAxIHx8IG5ld19pID4gbiB8fCBuZXdfaiA8IDEgfHwgbmV3X2ogPiBtIAogICAgICAgICAgICB8fCBhW25ld19pXVtuZXdfal0gPT0gMiB8fCBhW25ld19pXVtuZXdfal0gPT0gMCAKICAgICAgICAgICAgfHwgU1VLVU5BW25ld19pXVtuZXdfal0pIGNvbnRpbnVlOwoKICAgICAgICBkZnNTVUtVTkEobmV3X2ksIG5ld19qKTsKICAgIH0KfQoKdm9pZCBkZnNHT0pPKGxsIHgsIGxsIHkpIHsKICAgIEdPSk9beF1beV0gPSAxOwoKICAgIGZvcihhdXRvICZbaSwgal0gOiBkKSB7CiAgICAgICAgbGwgbmV3X2kgPSBpICsgeDsKICAgICAgICBsbCBuZXdfaiA9IGogKyB5OwogICAgICAgIGlmKG5ld19pIDwgMSB8fCBuZXdfaSA+IG4gfHwgbmV3X2ogPCAxIHx8IG5ld19qID4gbSAKICAgICAgICAgICAgfHwgYVtuZXdfaV1bbmV3X2pdID09IDEgfHwgYVtuZXdfaV1bbmV3X2pdID09IDAKICAgICAgICAgICAgfHwgR09KT1tuZXdfaV1bbmV3X2pdKSBjb250aW51ZTsKCiAgICAgICAgZGZzR09KTyhuZXdfaSwgbmV3X2opOwogICAgfQp9Cgp2b2lkIHNvbHZlKCkgewogICAgZGZzU1VLVU5BKHN1a3VuYS5mdCwgc3VrdW5hLnNjKTsKCiAgICBmb3IobGwgaSA9IDE7IGkgPD0gbjsgaSArKykgewogICAgICAgIGxsIGRhdSA9IDAsIGN1b2kgPSAwOwogICAgICAgIGZvcihsbCBqID0gMTsgaiA8PSBtOyBqICsrKSB7CiAgICAgICAgICAgIGlmKFNVS1VOQVtpXVtqXSkgewogICAgICAgICAgICAgICAgZGF1ID0gajsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmb3IobGwgaiA9IG07IGogPj0gMTsgaiAtLSkgewogICAgICAgICAgICBpZihTVUtVTkFbaV1bal0pIHsKICAgICAgICAgICAgICAgIGN1b2kgPSBqOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZvcihsbCBqID0gZGF1OyBqIDw9IGN1b2k7IGogKyspIHsKICAgICAgICAgICAgU1VLVU5BW2ldW2pdID0gMTsKICAgICAgICB9CiAgICB9CgogICAgZGZzR09KTyhnb2pvLmZ0LCBnb2pvLnNjKTsKCiAgICBmb3IobGwgaSA9IDE7IGkgPD0gbjsgaSArKykgewogICAgICAgIGxsIGRhdSA9IDAsIGN1b2kgPSAwOwogICAgICAgIGZvcihsbCBqID0gMTsgaiA8PSBtOyBqICsrKSB7CiAgICAgICAgICAgIGlmKEdPSk9baV1bal0pIHsKICAgICAgICAgICAgICAgIGRhdSA9IGo7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yKGxsIGogPSBtOyBqID49IDE7IGogLS0pIHsKICAgICAgICAgICAgaWYoR09KT1tpXVtqXSkgewogICAgICAgICAgICAgICAgY3VvaSA9IGo7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yKGxsIGogPSBkYXU7IGogPD0gY3VvaTsgaiArKykgewogICAgICAgICAgICBHT0pPW2ldW2pdID0gMTsKICAgICAgICB9CiAgICB9CgogICAgbGwgY250ID0gMDsKCiAgICBmb3IobGwgaSA9IDE7IGkgPD0gbjsgaSArKykgewogICAgICAgIGZvcihsbCBqID0gMTsgaiA8PSBtOyBqICsrKSB7CiAgICAgICAgICAgIGlmKFNVS1VOQVtpXVtqXSAmJiBHT0pPW2ldW2pdKSBjbnQgKys7CiAgICAgICAgfQogICAgfQoKICAgIGNvdXQgPDwgY250Owp9Cgp2b2lkIHdyaXRlKCkgewoKfQoKaW50IG1haW4oKSB7CiAgICBib29zdDsKICAgIC8vZmlsZSgpOwogICAgcmVhZCgpOwogICAgc29sdmUoKTsKICAgIHdyaXRlKCk7CiAgICByZXR1cm4gMDsKfQo=