#include <stdio.h>

int main(int argc, char const* argv[]) {
    int a, b;
    scanf("%d %d", &a, &b);
    getchar();  // 消耗掉输入缓冲区中的换行符

    char c[a][b];
    char d[a][b];  // 保存修改后的数据

    // 输入矩阵的数据
    for (int i = 0; i < a; i++) {
        for (int j = 0; j < b; j++) {
            scanf("%c", &c[i][j]);
            d[i][j] = c[i][j];
        }
        getchar();  // 消耗掉每行末尾的换行符
    }

    // 修改数据,扫出雷的个数
    for (int i = 0; i < a; i++) {
        for (int j = 0; j < b; j++) {
            int count = 0;

            if (c[i][j] == '*') { // 扫到雷就跳过
                continue;
            } else {
                // 检查8个方向
                if (i - 1 >= 0 && j - 1 >= 0 && c[i - 1][j - 1] == '*') count++; // 左上
                if (i - 1 >= 0 && c[i - 1][j] == '*') count++; // 上
                if (i - 1 >= 0 && j + 1 < b && c[i - 1][j + 1] == '*') count++; // 右上
                if (j - 1 >= 0 && c[i][j - 1] == '*') count++; // 左
                if (j + 1 < b && c[i][j + 1] == '*') count++; // 右
                if (i + 1 < a && j - 1 >= 0 && c[i + 1][j - 1] == '*') count++; // 左下
                if (i + 1 < a && c[i + 1][j] == '*') count++; // 下
                if (i + 1 < a && j + 1 < b && c[i + 1][j + 1] == '*') count++; // 右下

                d[i][j] = count + '0';
            }
        }
    }

    // 输出矩阵的数据(每个数输出域宽为5)
    for (int i = 0; i < a; i++) {
        for (int j = 0; j < b; j++) {
            printf("%c", d[i][j]);  // 域宽为5
        }
        printf("\n");
    }

    return 0;
}