//package AGC033
//
import java.util.*

//
//

data class Cell(val h: Int, val w: Int)

fun main(args: Array<String>) {
    val scanner = Scanner(System.`in`)

    val H = scanner.nextInt()
    val W = scanner.nextInt()

    var roundNum = 0

    var blackCells = mutableListOf<Cell>()

    val table = Array(H) { h ->
        scanner.next().mapIndexed { w, c ->
            if (c == '#') {
                blackCells.add(Cell(h, w))
            }

            c == '#'
        }.toTypedArray()
    }

    var blackCellNum = blackCells.size

    while (true) {

        if (blackCellNum == H * W) {
            println(roundNum)
            break
        }

        val nextBlackCells = mutableListOf<Cell>()

        for (cell in blackCells) {

            val h = cell.h
            val w = cell.w


            if (h + 1 != H && !table[h + 1][w]) {
                table[h + 1][w] = true
                nextBlackCells.add(Cell(h + 1, w))
            }
            if (w + 1 != W && !table[h][w + 1]) {
                table[h][w + 1] = true
                nextBlackCells.add(Cell(h, w + 1))
            }
            if (h - 1 != -1 && !table[h - 1][w]) {
                table[h - 1][w] = true
                nextBlackCells.add(Cell(h - 1, w))
            }
            if (w - 1 != -1 && !table[h][w - 1]) {
                table[h][w - 1] = true
                nextBlackCells.add(Cell(h, w - 1))

            }
        }

        // 黒いマスの数
        blackCellNum += nextBlackCells.size
        blackCells = nextBlackCells

        roundNum++
    }
}
//
//
//class DarkerandDarker {
//
//    companion object {
//
//        private val scanner = Scanner(System.`in`)
//
//        private var H = 0
//        private var W = 0
//
//        private lateinit var table: Array<Array<Boolean>>
//
//        fun init() {
////            val inputs = readLine()!!.split(" ")
//
//        }
//
//        fun execute() {
//            H = scanner.nextInt()
//            W = scanner.nextInt()
//
//            var roundNum = 0
//
//            var blackCells = mutableListOf<Pair<Int, Int>>()
//
//            table = Array(H) { h ->
//                scanner.next().mapIndexed { w, c ->
//                    if (c == '#') {
//                        blackCells.add(Pair(h, w))
//                    }
//
//                    c == '#'
//                }.toTypedArray()
//            }
//
//            var blackCellNum = blackCells.size
//
//            while (true) {
//
//                if (blackCellNum == H * W) {
//                    println(roundNum)
//                    break
//                }
//
//                val nextBlackCells = mutableListOf<Pair<Int, Int>>()
//
//                for (cell in blackCells) {
//
//                    val h = cell.first
//                    val w = cell.second
//
//
//                    if (h + 1 != H && !table[h + 1][w]) {
//                        table[h + 1][w] = true
//                        nextBlackCells.add(Pair(h + 1, w))
//                    }
//                    if (w + 1 != W && !table[h][w + 1]) {
//                        table[h][w + 1] = true
//                        nextBlackCells.add(Pair(h, w + 1))
//                    }
//                    if (h - 1 != -1 && !table[h - 1][w]) {
//                        table[h - 1][w] = true
//                        nextBlackCells.add(Pair(h - 1, w))
//                    }
//                    if (w - 1 != -1 && !table[h][w - 1]) {
//                        table[h][w - 1] = true
//                        nextBlackCells.add(Pair(h, w - 1))
//
//                    }
//                }
//
//                // 黒いマスの数
//                blackCellNum += nextBlackCells.size
//                blackCells = nextBlackCells
//
//                roundNum++
//            }
//        }
//
//    }
//}