ARG_H, ARG_W = gets.split.map(&:to_i)
map = Array.new(ARG_H+2)
(ARG_H+2).times do |i|
  if i == 0 || i == ARG_H+1
    map[i] = Array.new(ARG_W+2, false)
    next
  end
  line = Array.new(ARG_W+2)
  line[0] = false
  line[ARG_W+1] = false
  str = gets.chomp.split('')
  j = 1
  str.each do |chr|
    line[j] = chr == '#' ? false : true
    j+=1
  end
  map[i] = line
end
space_count = 0
map.each{|line| line.each{|x| space_count+=1 if x}}
first_point = [-1,-1]
first_found = false
map.each_with_index do |line, h|
  line.each_with_index do |point, w|
    if point
      first_point = [h, w]
      first_found = true
      break
    end
  end
  break if first_found
end

dxylist = [[0,1], [0,-1], [1,0], [-1,0]]
max_distance=0
prev_distance = -1
max_distance_point = nil
new_starts = [first_point]
while(max_distance != prev_distance) do
  visit_count = 0
  distance = {}
  new_starts.each do |point|
    distance[point.to_s] = 0
  end
  prev_distance = max_distance
  island_max_distance = 0
  max_distance = 0
  q = new_starts
  new_starts = []
  while(q.size > 0) do
    point = q.shift
    dxylist.each do |dxy|
      new_point = [point[0]+dxy[0], point[1]+dxy[1]]
      next unless map[new_point[0]][new_point[1]]
      next if distance[new_point.to_s]
      q.push new_point
      new_distance = distance[point.to_s] + 1
      distance[new_point.to_s] = new_distance
      if new_distance > island_max_distance
        island_max_distance = new_distance
        max_distance_point = new_point
      end
      if new_distance > max_distance
        max_distance = new_distance
      end
    end
    if q.size == 0
      new_starts.push(max_distance_point)
    end
    if q.size == 0 && visit_count != space_count
      found = false
      map.each_with_index do |line, h|
        line.each_with_index do |x, w|
          next unless x
          if distance[[h,w].to_s] == nil
            distance[[h,w].to_s] = 0
            q.push([h,w])
            island_max_distance = 0
            found = true
            break
          end
        end
        break if found
      end
    end
  end
end

puts max_distance