import Data.Array.Unboxed
import Control.Monad( replicateM)
import Data.List
main = do
    [h,w] <- return . map read . words =<< getLine
    lines <- replicateM h getLine
    let arr = listArray ((1,1),(h,w)) $ concat lines::UArray (Int,Int) Char
	lineCheck line = (1==) . length $ filter ("#"==) $ (map nub) $ group line 
	preCheck = and $ map lineCheck lines
	proc (i,j) (k,l)
	  | w==j&&i==h	= True
	  | w==j	= if arr!(i+1,j)=='.' || (((k,l)/=(i,j-1)&&arr!(i,j-1)=='#')||(1<i&&(k,l)/=(i-1,j)&&arr!(i-1,j)=='#'))
			    then False else proc (i+1,j) (i,j)
	  | h==i	= if arr!(i,j+1)=='.' || (((k,l)/=(i-1,j)&&arr!(i-1,j)=='#')||(1<j&&(k,l)/=(i,j-1)&&arr!(i,j-1)=='#'))
			    then False else proc (i,j+1) (i,j)
	  | otherwise   = if arr!(i,j+1)=='#'
			    then if arr!(i+1,j)=='#'||(1<j&&(k,l)/=(i,j-1)&&arr!(i,j-1)=='#')
				    then False
				    else proc (i,j+1) (i,j)
			    else if arr!(i+1,j)=='.'||(1<j&&(k,l)/=(i,j-1)&&arr!(i,j-1)=='#')
				    then False
				    else proc (i+1,j) (i,j)
    putStr $ if proc (1,1) (1,1) && preCheck then "Possible" else "Impossible"