#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const long long inff = 0x3f3f3f3f3f3f3f3f;
long long n, m;
vector<pair<int, int> > vec;
int judge(int a, int b) {
  if (a < b) swap(a, b);
  while (a % b) {
    int tmp = a % b;
    a = b;
    b = tmp;
  }
  if (b == 1)
    return 1;
  else
    return 0;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  int cnt = 0;
  int flag = 0;
  if (n == 1 && m == 0) {
    cout << "Possible" << endl;
    return 0;
  }
  for (int i = 1; i < n; i++) {
    vec.push_back(make_pair(i, i + 1));
    cnt++;
    if (cnt == m) {
      flag = 1;
      break;
    }
  }
  if (flag == 1 && cnt < n - 1) {
    cout << "Impossible" << endl;
    return 0;
  }
  if (flag == 0) {
    for (int i = 1; i < n - 1; i++) {
      for (int j = i + 2; j <= n; j++) {
        if (judge(i, j)) {
          vec.push_back(make_pair(i, j));
          cnt++;
        }
        if (cnt == m) {
          flag = 1;
          break;
        }
      }
      if (flag == 1) break;
    }
  }
  if (flag == 0) {
    cout << "Impossible" << endl;
    return 0;
  } else if (flag == 1) {
    cout << "Possible" << endl;
    for (int i = 0; i < vec.size(); i++) {
      cout << vec[i].first << " " << vec[i].second << endl;
    }
    return 0;
  }
}
