output_description: If it is possible that Shik only uses right and down moves, print `Possible`.
  Otherwise, print `Impossible`.
  
  * * *
input_description: The input is given from Standard Input in the following format:
  
      
      
      H W
      a_{11}a_{12}...a_{1W}
      :
      a_{H1}a_{H2}...a_{HW}
attempt: # coding: utf-8
  # Your code here!
  # coding: utf-8
  from fractions import gcd
  from functools import reduce
  import sys
  
  sys.setrecursionlimit(200000000)
  from inspect import currentframe
  
  
  # my functions here!
  # 標準エラー出力
  def printargs2err(*args):
      names = {id(v): k for k, v in currentframe().f_back.f_locals.items()}
      print(
          ", ".join(names.get(id(arg), "???") + " : " + repr(arg) for arg in args),
          file=sys.stderr,
      )
  
  
  def debug(x):
      print(x, file=sys.stderr)
  
  
  def printglobals():
      for symbol, value in globals().items():
          print('symbol="%s"、value=%s' % (symbol, value), file=sys.stderr)
  
  
  def printlocals():
      for symbol, value in locals().items():
          print('symbol="%s"、value=%s' % (symbol, value), file=sys.stderr)
  
  
  # 入力（後でいじる）
  def pin(type=int):
      return map(type, input().split())
  
  
  # 繰り返し自乗法だよ
  # これはnのp乗をmで割ったあまりをだすよ
  def modular_w_binary_method(n, m, p):
      ans = 1 if n > 0 else 0
      while p > 0:
          if p % 2 == 1:
              ans = (ans * n) % m
          n = (n**2) % m
          p //= 2
      return ans
  
  
  # mod上でのaの逆元を出すよ
  """
      フェルマーの小定理より a**(p)%p==a isTrue
      これを利用すれば a**(p-2)%p==a**(-1) isTrue
      元と逆元とをかけてpで割れば1が余るよ！
  """
  
  
  def modular_inverse(a, prime):
      return modular_w_binary_method(a, prime, prime - 2)
  
  
  # 逆元を使うと容易に頑張れるｃ
  def conbination(n, a, mod=10**9 + 7):
      # cはイラない
      res = 1
      for s in range(a):
          res = (res * (n - s) * (modular_inverse(s + 1, mod))) % mod
  
      return res
  
  
  # 操作から作れるものの組み合わせは何個かー＞同じものでも違う方法で構成できるかから考える方法もある
  """
  """
  
  # solution:
  
  # input
  H, W = pin()
  h = 0
  for i in range(H):
      t = list(input())
      for j in t:
          if j == "#":
              h += 1
  # print(h)
  print(["Impossible", "Possible"][h == (H + W - 1)])
  # print(m)
  # print(["No","Yes"][cond])
  # print([["NA","YYMM"],["MMYY","AMBIGUOUS"]][cMMYY][cYYMM])
  """
  #printデバッグ消した？
  #前の問題の結果見てないのに次の問題に行くの？
  """
  """
  お前カッコ閉じるの忘れてるだろ
  """
  
problem_description: Statement
  
  We have a grid of H rows and W columns. Initially, there is a stone in the top
  left cell. Shik is trying to move the stone to the bottom right cell. In each
  step, he can move the stone one cell to its left, up, right, or down (if such
  cell exists). It is possible that the stone visits a cell multiple times
  (including the bottom right and the top left cell).
  
  You are given a matrix of characters a_{ij} (1 \leq i \leq H, 1 \leq j \leq
  W). After Shik completes all moving actions, a_{ij} is `#` if the stone had
  ever located at the i-th row and the j-th column during the process of moving.
  Otherwise, a_{ij} is `.`. Please determine whether it is possible that Shik
  only uses right and down moves in all steps.
samples: [{"input": "4 5\n    ##...\n    .##..\n    ..##.\n    ...##", "output": "Possible\n    \n\nThe matrix can be generated by a 7-move sequence: right, down, right, down,\nright, down, and right.\n\n* * *"}, {"input": "5 3\n    ###\n    ..#\n    ###\n    #..\n    ###", "output": "Impossible\n    \n\n* * *"}, {"input": "4 5\n    ##...\n    .###.\n    .###.\n    ...##", "output": "Impossible"}]