#include <bits/stdc++.h>
using namespace std;
inline void scf(int &x) { scanf("%d", &x); }
inline void scf(long long &x) { scanf("%I64d", &x); }
inline void scf(unsigned long long &x) { scanf("%I64u", &x); }
inline void scf(double &x) { scanf("%lf", &x); }
inline void scf(char &x) { scanf("%c", &x); }
inline void scf(char *x) { scanf("%s", x); }
const int N = 1e5 + 7;
const int mars = 0x3c3c3c3c;
typedef int Arr[N];
typedef char Err[N];
typedef bool Brr[N];
typedef long long Lrr[N];
int n, m, k, w, a, b, c, d, p, q, x, y, t, cnt, l, r, s;
vector<pair<int, int> > V;
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
int main() {
  int i, j;
  scf(n), scf(m);
  if (m < n - 1) {
    puts("Impossible");
    return 0;
  }
  for (i = 1; i < n; i++) V.push_back(make_pair(i, i + 1)), m--;
  for (i = 1; i < n; i++) {
    if (m == 0) break;
    for (j = i + 2; j <= n; j++) {
      if (m == 0) break;
      if (gcd(i, j) == 1) V.push_back(make_pair(i, j)), m--;
    }
  }
  if (m) {
    puts("Impossible");
    return 0;
  }
  puts("Possible");
  for (auto x : V) printf("%d %d\n", x.first, x.second);
}
