#include <iostream>
using namespace std;
const int N=1010;
int op[N][N];
int main()
{
    int n,m;
    cin>>n>>m;
    
    for(int i=1;i<=n;i++)//将初始雷矩阵转换为01矩阵
    {
        for(int j=1;j<=m;j++)
        {
            char x;
            cin>>x;
            if(x=='*')op[i][j]=1;
        }
    }
    
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(op[i][j]==1)//01矩阵中数值为1的位置代表埋雷
            {
                cout<<'*';
            }else
            {
                int sum=op[i-1][j-1]+op[i-1][j]+op[i-1][j+1]+op[i][j+1]+op[i+1][j+1]+op[i+1][j]+op[i+1][j-1]+op[i][j-1];
                cout<<sum;//sum代表与当前位置相邻的8个方向中,有多少个雷
            }
        }
        cout<<endl;
    }
    return 0;
}