Problem:
Score : 300 points

Problem Statement

You are given a grid of squares with H horizontal rows and W vertical columns, where each square is painted white or black.
HW characters from A_{11} to A_{HW} represent the colors of the squares.
A_{ij} is # if the square at the i-th row from the top and the j-th column from the left is black, and A_{ij} is . if that square is white.

We will repeatedly perform the following operation until all the squares are black:

Every white square that shares a side with a black square, becomes black.

Find the number of operations that will be performed.
The initial grid has at least one black square.

Constraints

1 \leq H,W \leq 1000

A_{ij} is # or ..

The given grid has at least one black square.

Input

Input is given from Standard Input in the following format:

H W
A_{11}A_{12}...A_{1W}
:
A_{H1}A_{H2}...A_{HW}

Output

Print the number of operations that will be performed.

Sample Input 1

3 3
...
.#.
...

Sample Output 1

2

After one operation, all but the corners of the grid will be black. After one more operation, all the squares will be black.

Sample Input 2

6 6
..#..#
......
#..#..
......
.#....
....#.

Sample Output 2

3

Solution in Julia (0.5.0) (judge verdict: Runtime Error)

function StringChange(str,n,char)
    buf=collect(str)
    buf[n]=char
    return join(buf)
end
function isBlack(array,h,w)
    if (h<1) | (h > size(array)[1])
        return false
    end
    if (w<1) | (w > length(array[1]))
        return false
    end
    if array[h][w]=='#'
        return true
    end
    return false
end

function count(array,h,w)
    ctr=0
    for h_=h-1:h+1
        for w_=w-1:w+1
            if h_==h & w_==w
                continue 
            end
            ctr=ctr+isBlack(array,h_,w_)
        end
    end
    return ctr
end

function isAllBlack(array)
    for h_=1:size(array)[1]
        for w_=1:length(array[1])
            if array[h_][w_] !== '#'
                return false
            end
        end
    end
    return true
end

function nextStep(array)
    buf=copy(array)
    for h_=1:size(array)[1]
        for w_=1:length(array[1])
            if count(buf,h_,w_) >= 1
                array[h_]=StringChange(array[h_],w_,'#')
            end
        end
    end
end



function main()
    buf=map(x ->parse(Int64,x), split(readline()))
    h=buf[1]
    w=buf[2]
    array=Array{String,1}(undef,h)
    for h_ = 1:h
        array[h_]=readline()
        println(h_)
    end
    ctr=0
    while true
        if isAllBlack(array)
            break
        end
        nextStep(array)
        ctr=ctr+1
    end
    print(ctr)
end
main()