def daSiePrzejechac(mapa, rozmiar):
    h = len(mapa)
    w = len(mapa[0])
    for y in range(h):
        ostatniaPrzeszkoda = -1
        for x in range(w):
            if mapa[y][x]:
                ostatniaPrzeszkoda = x
            elif x - ostatniaPrzeszkoda < rozmiar:
                mapa[y][x] = True
    for x in range(w):
        ostatniaPrzeszkoda = -1
        for y in range(h):
            if mapa[y][x]:
                ostatniaPrzeszkoda = y
            elif y - ostatniaPrzeszkoda < rozmiar:
                mapa[y][x] = True
    if mapa[h - 2][rozmiar] or mapa[rozmiar][w - 2]:
        return False
    stos = [(rozmiar, h - 2)]
    mapa[h - 2][rozmiar] = True
    while len(stos) > 0:
        pozycja = stos.pop()
        x, y = pozycja
        if not mapa[y][x + 1]:
            stos.append((x + 1, y))
            mapa[y][x + 1] = True
        if not mapa[y][x - 1]:
            stos.append((x - 1, y))
            mapa[y][x - 1] = True
        if not mapa[y + 1][x]:
            stos.append((x, y + 1))
            mapa[y + 1][x] = True
        if not mapa[y - 1][x]:
            stos.append((x, y - 1))
            mapa[y - 1][x] = True
    return mapa[rozmiar][w - 2]

w, h = [int(x) for x in input().split()]
mapa = [(w + 2) * [True]]
for _ in range(h):
    mapa.append([True] + [c == 'X' for c in input()] + [True])
mapa.append((w + 2) * [True])
a = 1
b = min(w, h)
while a < b:
    srednia = (a + b + 1) // 2
    if daSiePrzejechac([[wartosc for wartosc in linia] for linia in mapa], srednia):
        a = srednia
    else:
        b = srednia - 1
print(a)
