#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
// 用動態陣列初始化
vector<vector<int>> a(n, vector<int>(m, 0));
vector<vector<int>> b(n, vector<int>(m, 0));
// 輸入地雷資料
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> a[i][j];
}
}
// 地雷處理
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
// 1號地雷
if (a[i][j] == 1) {
b[i][j] += 1; // 原格
// 注意邊界格子需特別處理
if (j - 1 >= 0) b[i][j-1] += 1; // 左
if (j + 1 < m) b[i][j+1] += 1; // 右
if (i - 1 >= 0) b[i-1][j] += 1; // 上
if (i + 1 < n) b[i+1][j] += 1; // 下
}
// 2號地雷
if(a[i][j] == 2) {
// 列+1
for (int k = 0; k < m; k++) {
b[i][k] += 1;
}
// 行+1
for (int l = 0; l < n; l++) {
b[l][j] += 1;
}
// 交叉處會重複+1次,所以要-1
b[i][j] -= 1;
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << b[i][j] << " ";
}
cout << endl;
}
return 0;
}