# 法1:
# n,m=list(map(int,input().split()))
# mine=[]
# #创建一个(n+2)行(m+2)列的扫雷矩阵,所有值初始化为.
# for i in range(n+2):
#     row=['.']*(m+2)
#     mine.append(row)
# # 为矩阵的n行m列赋值(键盘输入)
# for i in range(1,n+1):
#     row=str(input().strip())
#     for j in range(1,m+1):
#         mine[i][j]=row[j-1]

# # 遍历矩阵的矩阵的n行m列
# for i in range(1,n+1):
#     for j in range(1,m+1):
#         counts=0
#         if mine[i][j]=="*":
#             continue
#         # 计算八个方向雷的个数
#         else:
#             if mine[i][j-1]=="*":
#                 counts+=1
#             if mine[i][j+1]=="*":
#                 counts+=1
#             if mine[i-1][j]=="*":
#                 counts+=1
#             if mine[i+1][j]=="*":
#                 counts+=1
#             if mine[i-1][j-1]=="*":
#                 counts+=1
#             if mine[i-1][j+1]=="*":
#                 counts+=1
#             if mine[i+1][j-1]=="*":
#                 counts+=1
#             if mine[i+1][j+1]=="*":
#                 counts+=1    
#         mine[i][j]=str(counts)
# # 输出矩阵
# for i in range(1,n+1):
#     for j in range(1,m+1):
#         print(mine[i][j],end='')
#     print()


# 法2:
# 读取输入
n, m = map(int, input().split())
grid = [input().strip() for _ in range(n)]

# 初始化计数矩阵(记录每个位置周围的雷数)
count = [[0] * m for _ in range(n)]

# 定义八个方向:上、下、左、右、左上、右上、左下、右下
directions = [
    (-1, -1), (-1, 0), (-1, 1),
    (0, -1),           (0, 1),
    (1, -1),  (1, 0),  (1, 1)
]

# 第一遍遍历:统计雷的影响
for i in range(n):
    for j in range(m):
        if grid[i][j] == '*':  # 发现雷
            for dx, dy in directions:
                ni, nj = i + dx, j + dy  # 计算邻格坐标
                # 检查是否在矩阵范围内
                if 0 <= ni < n and 0 <= nj < m:
                    count[ni][nj] += 1  # 该位置雷计数+1

# 第二遍遍历:构建结果矩阵
result = []
for i in range(n):
    line = ''
    for j in range(m):
        if grid[i][j] == '*':
            line += '*'  # 雷位置保持不变
        else:
            line += str(count[i][j])  # 非雷位置输出雷计数
    result.append(line)

# 输出结果
for line in result:
    print(line)