#include <bits/stdc++.h>
using namespace std;
struct edge {
  long long a, b, index;
  long long u, v;
};
bool compare(edge i, edge j) {
  if (i.a == j.a) return i.b > j.b;
  return i.a < j.a;
}
bool compare2(edge i, edge j) { return i.index < j.index; }
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long n, m;
  cin >> n >> m;
  edge a[m];
  for (long long i = 0; i < m; i++) {
    cin >> a[i].a >> a[i].b;
    a[i].index = i;
  }
  long long suc = 0, unsuc = 0;
  sort(a, a + m, compare);
  long long u1 = 2, v1 = 3;
  for (long long i = 0; i < m; i++) {
    if (a[i].b == 1) {
      a[i].u = 1;
      a[i].v = suc + 2;
      suc++;
    } else {
      unsuc++;
      long long edges = ((suc + 1) * (suc)) / 2 - (suc);
      if (edges < unsuc) {
        cout << -1 << '\n';
        return 0;
      }
      a[i].u = u1;
      a[i].v = v1;
      if (u1 + 1 == v1) {
        u1 = 2;
        v1++;
      } else {
        u1++;
      }
    }
  }
  sort(a, a + m, compare2);
  for (long long i = 0; i < m; i++) cout << a[i].u << " " << a[i].v << '\n';
  return 0;
}
