#include <bits/stdc++.h>
using namespace std;
long long n, m;
string s;
set<pair<long long, long long> > topick;
vector<pair<pair<long long, long long>, long long> > w;
long long K = 1;
long long pointer1 = 1, pointer2 = 3;
long long canmove = 0;
map<long long, vector<pair<long long, long long> > > tohold;
bool cmp(pair<pair<long long, long long>, long long> a,
         pair<pair<long long, long long>, long long> b) {
  if (a.first.first == b.first.first) {
    return a.first.second > b.first.second;
  } else
    return a.first.first < b.first.first;
}
bool cmp2(pair<pair<long long, long long>, long long> a,
          pair<pair<long long, long long>, long long> b) {
  return a.second < b.second;
}
int32_t main() {
  scanf("%lld%lld", &n, &m);
  w.resize(m);
  for (long long i = 0; i < m; i++) {
    scanf("%lld%lld", &w[i].first.first, &w[i].first.second);
    w[i].second = i;
  }
  for (long long i = 1; i <= 100000; i++) {
    tohold[i + 2].push_back(pair<long long, long long>(i, i + 2));
  }
  sort(w.begin(), w.end(), cmp);
  vector<pair<pair<long long, long long>, long long> > t;
  for (long long i = 0; i < w.size(); i++) {
    if (w[i].first.second == 0) {
      if (topick.size()) {
        pair<long long, long long> ww = *topick.begin();
        if (ww.second + 1 > K) {
          tohold[ww.second + 1].push_back(
              pair<long long, long long>(ww.first, ww.second + 1));
        } else {
          topick.insert(pair<long long, long long>(ww.first, ww.second + 1));
        }
        topick.erase(ww);
        t.push_back(pair<pair<long long, long long>, long long>(
            pair<long long, long long>(ww.first, ww.second), w[i].second));
      } else {
        printf("%lld\n", -1LL);
        return 0;
      }
    } else {
      K++;
      while (tohold[K].size()) {
        topick.insert(tohold[K].back());
        tohold[K].pop_back();
      }
      t.push_back(pair<pair<long long, long long>, long long>(
          pair<long long, long long>(K - 1, K), w[i].second));
    }
  }
  sort(t.begin(), t.end(), cmp2);
  for (long long i = 0; i < m; i++) {
    printf("%lld %lld\n", t[i].first.first, t[i].first.second);
  }
}
