#include <bits/stdc++.h>
using namespace std;
const int maxn = 610;
int prime[maxn];
int phi[maxn];
int tot;
int n, m;
void Euler() {
  int node = n < 600 ? n : 600;
  for (int i = 2; i <= node; i++) {
    if (!phi[i]) {
      prime[tot++] = i;
      phi[i] = i - 1;
    }
    for (int j = 0; j < tot && i * prime[j] <= node; j++) {
      if (i % prime[j])
        phi[i * prime[j]] = phi[i] * (prime[j] - 1);
      else {
        phi[i * prime[j]] = phi[i] * prime[j];
        break;
      }
    }
  }
}
inline int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
int main() {
  scanf("%d%d", &n, &m);
  Euler();
  int i;
  int num = 0;
  for (i = 2; i <= n; i++) {
    num += phi[i];
    if (num >= m) break;
  }
  if (m < n - 1 || i > n)
    printf("Impossible\n");
  else {
    printf("Possible\n");
    for (int i = 1; i < n; i++) printf("%d %d\n", i, i + 1);
    m -= (n - 1);
    int node = 600 < n ? 600 : n;
    for (int i = 1; i <= node && m; i++) {
      for (int j = i + 1; j <= node && m; j++) {
        if (gcd(i, j) == 1 && i + 1 != j) printf("%d %d\n", i, j), m--;
      }
    }
  }
}
