n, m = input().split()
n = int(n)
m = int(m)
lis = []
lis_new = []
'''生成 * 周围的八个坐标'''
dirs = [
lambda x, y: (x - 1, y), # 上
lambda x, y: (x + 1, y), # 下
lambda x, y: (x, y - 1), # 左
lambda x, y: (x, y + 1), # 右
lambda x, y: (x - 1, y - 1), #左上
lambda x, y: (x - 1, y + 1), #右上
lambda x, y: (x + 1, y - 1), #左下
lambda x, y: (x + 1, y + 1), #右下
]
for i in range(n):
li = list(input())
lis.append(li)
for i in range(n):
li = [0 for _ in range(m)]
lis_new.append(li)

for x in range(len(lis)):
for y in range(len(lis[x])):
'''
如果lis(x,y)对应 * 则
将lis_new中的(x,y)对应的 0 换成 *
'''
if lis[x][y] == '':
lis_new[x][y] = '
'
for dir in dirs:
next_node = dir(x, y)
'''
依次取出 * 周围的八个坐标,
如果没有越界则将出现次数进行累计并填入该位置
'''
if -1 < next_node[0] < n and -1 < next_node[1] < m and lis_new[next_node[0]][next_node[1]] != '*':
lis_new[next_node[0]][next_node[1]] += 1
'''按照要求输出lis_new'''
for li in lis_new:
for j in li:
print(j, end='')
print()