;;;; q
(defstruct queue (entrance nil) (exit nil))

(defun enqueue (item queue)
  (let ((cell (list item)))
    (if (queue-entrance queue)
        (setf (cdr (queue-entrance queue)) cell)
        (setf (queue-exit queue) cell))
    (setf (queue-entrance queue) cell)))

(defun dequeue (queue)
  (when (queue-exit queue)
    (prog1 (pop (queue-exit queue))
      (unless (queue-exit queue)
        (setf (queue-entrance queue) nil)))))

;;;; main
(let* ((h (read))
       (w (read))
       (s (make-array (list h w) :initial-element nil))
       (e (make-array (list h w) :initial-element nil))
       (num 0)
       (ans 0))
  ;;
  (loop :for i :from 0 :to (1- h)
        :for l := (read-line)
        :do (loop :for j :from 0 :to (1- w)
                  :do (when (char= (aref l j) #\.)
                        (setf (aref s i j) t)
                        (incf num))))
  ;
  (loop :for i :from 0 :to (1- h)
        :do (loop :for j :from 0 :to (1- w)
                  :do (loop :for (di . dj) :in '((0 . -1) (0 . 1) (1 . 0) (-1 . 0))
                            :if (and (<= 0 (+ i di) (1- h)) (<= 0 (+ j dj) (1- w)) (aref s (+ i di) (+ j dj)))
                            :do (push (cons (+ i di) (+ j dj)) (aref e i j)))))
  ;
  (loop :for si :from 0 :to (1- h)
        :do (loop :for sj :from 0 :to (1- w)
                  :do (let ((q (make-queue))
                            (chk (make-array (list h w) :initial-element nil))
                            (cnt 0))
                        (enqueue (list* si sj 0) q)
                        (loop :while (queue-exit q)
                              :for (i j . p) := (dequeue q)
                              :do (unless (aref chk i j)
                                    (setf (aref chk i j) t)
                                    (incf cnt)
                                    (when (= cnt num)
                                      (setf ans (max ans p))
                                      (return))
                                    (loop :for (y . x) :in (aref e i j)
                                          :if (not (aref chk y x))
                                          :do (enqueue (list* y x (1+ p)) q)))))))
  ;
  (format t "~A~%" ans))
