output_description: Print the number of operations that will be performed.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      H W
      A_{11}A_{12}...A_{1W}
      :
      A_{H1}A_{H2}...A_{HW}
attempt: H, W = map(int, input().split())
  a = []
  posi = []
  cout = 0
  for i in range(H):
      road = input()
      # a.append(list(road))
      for k in range(len(road)):
          a.append(road[k])
          if road[k] == "#":
              cout += 1
              position = (i, k)
              posi.append(position)
  
  
  def sharp_checker(x_posi, y_posi):
      if a[x_posi][y_posi] == ".":
          index = (x_posi, y_posi)
          list_indexs.append(index)
          a[x_posi][y_posi] = "#"
          # print(list_indexs)
          return 1
      else:
          return 0
  
  
  def change():
      add_count = 0
      for index in range(len(posi)):
          # print("hello")
          x = posi[index][0]
          y = posi[index][1]
          if x == 0:
              if y == 0:
                  add_count += sharp_checker(x + 1, y)
                  add_count += sharp_checker(x, y + 1)
              elif y == W - 1:
                  add_count += sharp_checker(x + 1, y)
                  add_count += sharp_checker(x, y - 1)
              else:
                  add_count += sharp_checker(x + 1, y)
                  add_count += sharp_checker(x, y - 1)
                  add_count += sharp_checker(x, y + 1)
          elif x == H - 1:
              if y == 0:
                  add_count += sharp_checker(x - 1, y)
                  add_count += sharp_checker(x, y + 1)
              elif y == W - 1:
                  add_count += sharp_checker(x - 1, y)
                  add_count += sharp_checker(x, y - 1)
              else:
                  add_count += sharp_checker(x - 1, y)
                  add_count += sharp_checker(x, y + 1)
                  add_count += sharp_checker(x, y - 1)
          elif y == 0:
              add_count += sharp_checker(x - 1, y)
              add_count += sharp_checker(x + 1, y)
              add_count += sharp_checker(x, y + 1)
          elif y == W - 1:
              add_count += sharp_checker(x - 1, y)
              add_count += sharp_checker(x + 1, y)
              add_count += sharp_checker(x, y - 1)
          else:
              add_count += sharp_checker(x - 1, y)
              add_count += sharp_checker(x, y + 1)
              add_count += sharp_checker(x + 1, y)
              add_count += sharp_checker(x, y - 1)
      return (add_count, list_indexs)
  
  
  ans = 0
  while cout < H * W:
      list_indexs = []
      add, posi = change()
      cout += add
      ans += 1
  print(ans)
  
problem_description: 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.
samples: [{"input": "3 3\n    ...\n    .#.\n    ...", "output": "2\n    \n\nAfter one operation, all but the corners of the grid will be black. After one\nmore operation, all the squares will be black.\n\n* * *"}, {"input": "6 6\n    ..#..#\n    ......\n    #..#..\n    ......\n    .#....\n    ....#.", "output": "3"}]