#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;
}