import Control.Applicative
import Control.Monad
import Data.List
import Data.Array.Unboxed

dfs :: Int -> Int -> Int -> UArray (Int, Int) Char -> Bool
dfs h w sharps aa = iter [(1, 1, 1)]
  where
    next (i, j) = filter (\n -> p1 n && p2 n) [(i, j+1), (i+1, j)]
      where
        p1 = inRange (bounds aa)
        p2 = (== '#') . (aa !)
    iter [] = False
    iter ((i, j, s):xs)
        | (i, j) == (h, w) && s == sharps = True
        | otherwise                       = iter (ns ++ xs)
      where
        ns = [(k, l, s + 1) | (k, l) <- next (i, j)]

main :: IO ()
main = do
    [h, w] <- fmap read . words <$> getLine :: IO [Int]
    as <- concat <$> replicateM h getLine :: IO String
    let sharps = length $ filter (== '#') as
    let aa = listArray ((1, 1), (h, w)) as :: UArray (Int, Int) Char
    if dfs h w sharps aa
        then putStrLn "Possible"
        else putStrLn "Impossible"