var n,m,i,j:longint;
a:array[0..101,0..101] of longint;
b:array[0..101,0..101] of boolean;
c:char;
begin
//assign(input,'mine.in');
//assign(output,'mine.out');
//reset(input);
//rewrite(output);
readln(n,m);
fillchar(b,sizeof(b),false);
for i:=1 to n do
begin
for j:=1 to m do
begin
read(c);
if c='*' then b[i,j]:=true
else if c='?' then b[i,j]:=false;
end;
readln;
end;
for i:=1 to n do
begin
for j:=1 to m do
if b[i,j] then write('*')
else begin
a[i,j]:=0;
if b[i-1,j-1] then inc(a[i,j]);
if b[i-1,j] then inc(a[i,j]);
if b[i-1,j+1] then inc(a[i,j]);
if b[i,j-1] then inc(a[i,j]);
if b[i,j+1] then inc(a[i,j]);
if b[i+1,j-1] then inc(a[i,j]);
if b[i+1,j] then inc(a[i,j]);
if b[i+1,j+1] then inc(a[i,j]);
write(a[i,j]);
end;
writeln;
end;
//close(input);
//close(output);
end.
/**************************************************************
Problem: 2341
User: admin
Language: Pascal
Result: Wrong Answer
****************************************************************/