#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    vector<vector<char>> table(n, vector<char>(m));
    
    // 读取输入矩阵
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            cin >> table[i][j];
        }
    }
    
    // 定义八个方向:上、下、左、右、左上、右上、左下、右下
    int dx[] = {-1, -1, -1, 0, 0, 1, 1, 1};
    int dy[] = {-1, 0, 1, -1, 1, -1, 0, 1};
    
    // 处理每个格子
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            // 如果是地雷,直接输出*
            if(table[i][j] == '*') {
                cout << '*';
            } else {
                // 计算周围八个方向的地雷数量
                int count = 0;
                for(int k = 0; k < 8; k++) {
                    int ni = i + dx[k];  // 新的行坐标
                    int nj = j + dy[k];  // 新的列坐标
                    
                    // 检查坐标是否在有效范围内
                    if(ni >= 0 && ni < n && nj >= 0 && nj < m) {
                        if(table[ni][nj] == '*') {
                            count++;
                        }
                    }
                }
                cout << count;
            }
        }
        cout << endl;  // 每行结束后换行
    }
    
    return 0;
}
// 64 位输出请用 printf("%lld")