#include<iostream>
using namespace std;
const int N=1010;
int n,m;
char a[N][N];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)//从1开始,并且数组的长度比n,m都大,我们就不用考虑越界的情况了
{
for(int j=1;j<=m;j++)cin>>a[i][j];
}
int x[8]={-1,-1,-1,0,1,1,1,0},y[8]={-1,0,1,1,1,0,-1,-1};//遍历周围8个格子,x是i需要加减的值,y是j需要加减的值
int l;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
l=0;//该格子开始的地雷数量为0
if(a[i][j]=='*')//如果该格子是雷:直接输出并跳过此次循环
{
printf("*");
continue;
}
for(int k=0;k<8;k++)//侦查周围8个格子有没有雷
{
if(a[i+x[k]][j+y[k]]=='*')l++;
}
printf("%d",l);
}
puts("");
}
return 0;
}