#include <bits/stdc++.h>
using ll = long long int;
int main() {
  int n, m;
  std::cin >> n >> m;
  std::vector<std::vector<int>> matr1(n);
  std::vector<std::vector<int>> matr2(n);
  std::vector<std::vector<int>> matr_min(n);
  std::vector<std::vector<int>> matr_max(n);
  for (int i = 0; i < n; i++) {
    matr1[i].resize(m);
    matr2[i].resize(m);
    matr_min[i].resize(m);
    matr_max[i].resize(m);
  }
  for (int i = 0; i < n; i++) {
    for (auto &it : matr1[i]) {
      std::cin >> it;
    }
  }
  for (int i = 0; i < n; i++) {
    for (auto &it : matr2[i]) {
      std::cin >> it;
    }
  }
  for (int i = 0; i < n; i++) {
    for (int z = 0; z < m; z++) {
      matr_min[i][z] = std::min(matr1[i][z], matr2[i][z]);
      matr_max[i][z] = std::max(matr1[i][z], matr2[i][z]);
    }
  }
  for (int i = 0; i < n; i++) {
    for (int z = 0; z < m; z++) {
      if (z - 1 >= 0 && matr_min[i][z - 1] >= matr_min[i][z]) {
        std::cout << "Impossible" << std::endl;
        return 0;
      }
      if (i - 1 >= 0 && matr_min[i - 1][z] >= matr_min[i][z]) {
        std::cout << "Impossible" << std::endl;
        return 0;
      }
      if (z - 1 >= 0 && matr_max[i][z - 1] >= matr_max[i][z]) {
        std::cout << "Impossible" << std::endl;
        return 0;
      }
      if (i - 1 >= 0 && matr_max[i - 1][z] >= matr_max[i][z]) {
        std::cout << "Impossible" << std::endl;
        return 0;
      }
    }
  }
  std::cout << "Possible" << std::endl;
}
