#include <bits/stdc++.h>
using namespace std;

int main() {
    long long int A,B,C,D, K, N, H, W;
    long long int new_A, new_B, new_C, new_K;
    long long int a, b, c, d, e, f, g, h, i, j, k, l, m, n, s, w;
    vector<long long int> a_v;
    cin >> H;
    cin >> W;
    string str[H];
    long long int board[H][W] = {{0}};
    // long long int res[H][W] = {{0}};
    long long int sum = 0;

    for (long long int i = 0; i < H; i++) {
        cin >> str[i];
    } 

    int dx[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
    int dy[8] = {-1, -1, -1, 0, 0, 1, 1, 1};
    for (long long int i = 0; i < H; i++) {
        for (long long int j = 0; j < W; j++) {
            board[i][j] = 0;
            if (str[i][j] == '#') {
                continue;
            }
            for (int k = 0; k < 8; k++) {
                long long int xx = j + dx[k];
                long long int yy = i + dy[k];
                if (0 <= xx && xx < W &&
                    0 <= yy && yy < H) {
                    if (str[yy][xx] == '#') {
                        board[i][j]++;
                    }
                }
            }
            // cout << board[i][j];
        }
                    // cout << endl;

    }
    for (long long int i = 0; i < H; i++) {
        for (long long int j = 0; j < W; j++) {
            if (str[i][j] == '#') {cout << "#";}
            else {
                cout << board[i][j];
            } 
        }
            cout << endl;
    }
    // cout << str << endl;
    // long long int board[str.length()+1];
    // for (int i = 1; i <= str.length(); i++) {
    //     if (str[i] == '<') {
    //         board[i] = 1;
    //     } else {
    //         board[i] = 0;
    //     }
    // }
    // long long int sum = 0, cny = 0;
    // for (int i = 0; i < str.length(); i++) {
    //     if (board[i] == 1) {
    //         sum += i-cny;
    //         cny++;
    //     }
    // }
    // cout << sum << endl;
    // for (int i = 0; i < N; i++) {
    //     long long int a;
    //     cin >> a;
    //     a_v.push_back(a);
    // }

    // int now = 1;
    // bool flag = false;
    // for (i = 0; i < N; i++) { 
    //     now = a_v[now-1];
    //     // cout << now << endl;
    //     if (now == 2) {
    //         flag = true;
    //         break;
    //     }
    // }

    // if (flag) {
    //     cout << i+1 << endl;
    // }
    // else {
    //     cout << "-1" << endl;
    // }

    // cin >> A;
    // cin >> B;
    // cin >> C;
    // cin >> D;

    // while(1) {
    //     C = C-B;
    //     if (C <= 0) {break;} 
    //     A = A - D;    
    //     if (A <= 0) {break;} 
    // }
    // if (A <= 0) {
    //     cout << "No" << endl;
    // }
    // else {
    //     cout << "Yes" << endl;
    // }
    // long long int tmp, cnt = 0;
    // tmp = b;
    // for (;;) {
    //     tmp = tmp/10;
    //     cnt ++;
    //     if (tmp > 0) {
    //     }
    //     else {
    //         break;
    //     }
    // } 
    // long long int time = 1;
    // for (int i = 0; i < cnt; i++) {
    //     time *= 10;
    // }
    // b += a*time;
    // // cout << b<< endl;
    // bool flag = false;
    // for (long long int i = 0; i < sqrt(b)+1; i++) {
    //     if (i*i == b) {
    //         flag = true;
    //     }
    // }
    // if (flag) {
    //     cout << "Yes" << endl;
    // }
    // else {
    //     cout << "No" << endl;
    // }

    return 0;
}

Measured memory_bytes: 256