local function str2tbl(s)
    local t = {string.byte(s, 1, #s)}
    for i=1, #t do
        t[i] = string.char(t[i])
    end
    return t
end

------
local H, W = io.read("*n", "*n", "*l")
local grid = {}
local distance = {}
for i=1, H do
    grid[i] = str2tbl(io.read("*l"))
    distance[i] = {}
    local grid_i, distance_i = grid[i], distance[i]
    for j=1, W do
        distance_i[j] = grid_i[j] == '#' and 0 or 2001
    end
end
local math_min = math.min
for i=1, H do
    local distance_i = distance[i]
    for j=2, W do
        distance_i[j] = math_min(distance_i[j], distance_i[j-1] + 1)
    end
end
for i=1, H do
    local distance_i = distance[i]
    for j=W-1, 1, -1 do
        distance_i[j] = math_min(distance_i[j], distance_i[j+1] + 1)
    end
end
for i=2, H do
    local distance_i = distance[i]
    local distance_im1 = distance[i-1]
    for j=1, W do
        distance_i[j] = math_min(distance_i[j], distance_im1[j] + 1)
    end
end
for i=H-1, 1, -1 do
    local distance_i = distance[i]
    local distance_ip1 = distance[i+1]
    for j=1, W do
        distance_i[j] = math_min(distance_i[j], distance_ip1[j] + 1)
    end
end
local ans = 0
local math_max = math.max
for i=1, H do
    local distance_i = distance[i]
    for j=1, W do
        ans = math_max(ans, distance_i[j])
    end
end
print(ans)