#include <bits/stdc++.h>
using namespace std;
int n, m;
struct edge {
  int id, u, v, w, b;
} e[100005];
int au[100005], av[100005];
bool cmp(edge a, edge b) { return a.b == b.b ? a.w < b.w : a.b > b.b; }
int main() {
  scanf("%d%d", &n, &m);
  for (int x, y, i = 1; i <= m; i++) {
    e[i].id = i;
    scanf("%d%d", &e[i].w, &e[i].b);
  }
  sort(e + 1, e + m + 1, cmp);
  for (int i = 1; i < n; i++) e[i].u = i, e[i].v = i + 1;
  int U = 0, V = 2;
  for (int i = n; i <= m; i++) {
    if (U + 2 == V)
      V++, U = 1;
    else
      U++;
    if (e[i].w < e[V - 1].w) {
      puts("-1");
      return 0;
    }
    e[i].u = U, e[i].v = V;
  }
  for (int i = 1; i <= m; i++) au[e[i].id] = e[i].u, av[e[i].id] = e[i].v;
  for (int i = 1; i <= m; i++) printf("%d %d\n", au[i], av[i]);
  return 0;
}
