#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:66777216")
using namespace std;
const double eps = 1e-7;
const double pi = acos(-1.0);
const long long INF = (long long)2e9 + 1;
const long long LINF = (long long)8e18;
const long long inf = (long long)2e9 + 1;
const long long linf = (long long)8e18;
const long long MM = (long long)1e9 + 7;
int solve();
void gen();
int main() {
  solve();
  return 0;
}
const int dd = 1e5 + 7;
int p[dd], r[dd];
int get(int v) { return v == p[v] ? v : p[v] = get(p[v]); }
void un(int a, int b) {
  a = get(a), b = get(b);
  if (a != b) {
    if (r[b] > r[a]) swap(a, b);
    p[b] = a;
    r[a] += r[b];
  }
}
vector<pair<int, int> > V;
set<int> S;
set<int> T[dd];
int solve() {
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < (int)n; i++) {
    p[i] = i, r[i] = 1;
    T[i].insert(i);
    S.insert(i);
  }
  vector<pair<pair<int, int>, int> > A(m);
  for (int i = 0; i < (int)m; i++) {
    cin >> A[i].first.first >> A[i].first.second;
    A[i].second = i;
    A[i].first.second ^= 1;
  }
  sort(A.begin(), A.end());
  int u = -1, v = -1;
  int curind = 0;
  vector<pair<int, int> > ans(m);
  for (int i = 0; i < (int)m; i++) {
    if (!A[i].first.second) {
      if (S.size() < 2) {
        puts("-1");
        return 0;
      }
      int a = *S.begin();
      S.erase(S.begin());
      int b = *S.begin();
      S.erase(S.begin());
      int pa = get(a), pb = get(b);
      T[get(a)].erase(a);
      T[get(b)].erase(b);
      un(a, b);
      ans[A[i].second] = {a, b};
      S.insert(get(a));
      T[get(a)].insert(a);
      T[get(b)].insert(b);
      if (pa != get(a)) {
        for (auto x : T[get(a)]) {
          if (V.size() >= m) break;
          if (a != x && b != x) V.push_back(make_pair(a, x));
        }
      } else {
        for (auto x : T[get(b)]) {
          if (V.size() >= m) break;
          if (a != x && b != x) V.push_back(make_pair(b, x));
        }
      }
    } else {
      if (curind >= V.size()) {
        puts("-1");
        return 0;
      }
      ans[A[i].second] = V[curind++];
    }
  }
  for (auto c : ans) cout << c.first + 1 << " " << c.second + 1 << "\n";
  return 0;
}
