from collections import deque



H, W = list(map(int, input().split()))

grid = [list(eval(input())) for i in range(H)]



# '#'の位置をキューに追加（＝今回はこれが複数あるので、複数スタートとなる）

black_cells = deque()

for h in range(H):

    for w in range(W):

        if grid[h][w] == '#':

            black_cells.append([h, w, 0])



ans = 0

while len(black_cells) > 0:

    one_black_cell = black_cells.popleft()  # キューとして使うのでpop()ではなくpopleft()

    for dy, dx in [[1, 0], [0, 1], [-1, 0], [0, -1]]:

        nh = one_black_cell[0] + dy

        nw = one_black_cell[1] + dx

        d = one_black_cell[2]

        if nh < 0 or H <= nh or nw < 0 or W <= nw:

            continue

        if grid[nh][nw] == '.':

            grid[nh][nw] = '#'

            black_cells.append([nh, nw, d + 1])

        ans = d



print(ans)
from collections import deque



H, W = list(map(int, input().split()))

grid = [eval(input()) for i in range(H)]



# 初期の黒('#')の位置からの距離

dist = [[-1]*W for _ in range(H)]



# '#'の位置をキューに追加（＝今回はこれが複数あるので、複数スタートとなる）

black_cells = deque()

for h in range(H):

    for w in range(W):

        if grid[h][w] == '#':

            black_cells.append((h, w))

            dist[h][w] = 0



d = 0

while black_cells:

    # キューとして使うのでpop()ではなくpopleft()

    h, w = black_cells.popleft()  # 黒いセルの座標

    d = dist[h][w]

    for dy, dx in ((1, 0), (0, 1), (-1, 0), (0, -1)):

        new_h = h + dy

        new_w = w + dx

        if new_h < 0 or H <= new_h or new_w < 0 or W <= new_w:

            continue

        if dist[new_h][new_w] == -1:  # セルが白('.')であるのと同義

            dist[new_h][new_w] = d+1

            black_cells.append((new_h, new_w))



print(d)
from collections import deque

H, W = list(map(int, input().split()))
grid = [list(eval(input())) for i in range(H)]
# '#'の位置をキューに追加（＝今回はこれが複数あるので、複数スタートとなる）
black_cells = deque()
for h in range(H):
    for w in range(W):
        if grid[h][w] == "#":
            black_cells.append([h, w, 0])
ans = 0
while len(black_cells) > 0:
    one_black_cell = black_cells.popleft()  # キューとして使うのでpop()ではなくpopleft()
    for dy, dx in [[1, 0], [0, 1], [-1, 0], [0, -1]]:
        nh = one_black_cell[0] + dy
        nw = one_black_cell[1] + dx
        d = one_black_cell[2]
        if nh < 0 or H <= nh or nw < 0 or W <= nw:
            continue
        if grid[nh][nw] == ".":
            grid[nh][nw] = "#"
            black_cells.append([nh, nw, d + 1])
        ans = d
print(ans)

from collections import deque

H, W = list(map(int, input().split()))
grid = [eval(input()) for i in range(H)]
# 初期の黒('#')の位置からの距離
dist = [[-1] * W for _ in range(H)]
# '#'の位置をキューに追加（＝今回はこれが複数あるので、複数スタートとなる）
black_cells = deque()
for h in range(H):
    for w in range(W):
        if grid[h][w] == "#":
            black_cells.append((h, w))
            dist[h][w] = 0
d = 0
while black_cells:
    # キューとして使うのでpop()ではなくpopleft()
    h, w = black_cells.popleft()  # 黒いセルの座標
    d = dist[h][w]
    for dy, dx in ((1, 0), (0, 1), (-1, 0), (0, -1)):
        new_h = h + dy
        new_w = w + dx
        if new_h < 0 or H <= new_h or new_w < 0 or W <= new_w:
            continue
        if dist[new_h][new_w] == -1:  # セルが白('.')であるのと同義
            dist[new_h][new_w] = d + 1
            black_cells.append((new_h, new_w))
print(d)

-grid = [list(eval(input())) for i in range(H)] +grid = [eval(input()) for i in range(H)] +# 初期の黒('#')の位置からの距離 +dist = [[-1] * W for _ in range(H)] -            black_cells.append([h, w, 0]) -ans = 0 -while len(black_cells) > 0: -    one_black_cell = black_cells.popleft()  # キューとして使うのでpop()ではなくpopleft() -    for dy, dx in [[1, 0], [0, 1], [-1, 0], [0, -1]]: -        nh = one_black_cell[0] + dy -        nw = one_black_cell[1] + dx -        d = one_black_cell[2] -        if nh < 0 or H <= nh or nw < 0 or W <= nw: +            black_cells.append((h, w)) +            dist[h][w] = 0 +d = 0 +while black_cells: +    # キューとして使うのでpop()ではなくpopleft() +    h, w = black_cells.popleft()  # 黒いセルの座標 +    d = dist[h][w] +    for dy, dx in ((1, 0), (0, 1), (-1, 0), (0, -1)): +        new_h = h + dy +        new_w = w + dx +        if new_h < 0 or H <= new_h or new_w < 0 or W <= new_w: -        if grid[nh][nw] == ".": -            grid[nh][nw] = "#" -            black_cells.append([nh, nw, d + 1]) -        ans = d -print(ans) +        if dist[new_h][new_w] == -1:  # セルが白('.')であるのと同義 +            dist[new_h][new_w] = d + 1 +            black_cells.append((new_h, new_w)) +print(d)