#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<pair<int, int> > a, b, res;
vector<pair<int, long long> > c;
map<int, int> M;
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = 0; i < m; ++i) {
    int x, y;
    cin >> x >> y;
    if (y == 1)
      a.push_back(make_pair(x, i));
    else
      b.push_back(make_pair(x, i));
  }
  sort(a.begin(), a.end());
  if (b.size() > 0)
    sort(b.begin(), b.end());
  else {
    for (int i = 0; i < n - 1; ++i) cout << i + 1 << " " << i + 2 << "\n";
    return 0;
  }
  if (b[0].first < a[0].first) {
    cout << "-1\n";
    return 0;
  }
  for (int i = 0; i < a.size(); ++i) ++M[a[i].first];
  for (map<int, int>::iterator it = M.begin(); it != M.end(); ++it)
    c.push_back(make_pair(it->first, it->second));
  for (int i = 1; i < c.size(); ++i) c[i].second += c[i - 1].second;
  int j = 0;
  for (int i = 0; i < b.size(); ++i) {
    while (j + 1 < c.size() && c[j + 1].first <= b[i].first) ++j;
    long long z = (c[j].second + 1) * c[j].second - 2ll * (c[j].second + i + 1);
    if (z < 0) {
      cout << "-1\n";
      return 0;
    }
  }
  res.resize(m);
  for (int i = 0; i < a.size(); ++i) res[a[i].second] = make_pair(i + 1, i + 2);
  pair<int, int> pa = make_pair(1, 3);
  for (int i = 0; i < b.size(); ++i) {
    res[b[i].second] = pa;
    if (pa.first + 2 == pa.second) {
      pa.first = 1;
      ++pa.second;
    } else
      ++pa.first;
  }
  for (int i = 0; i < res.size(); ++i)
    cout << res[i].first << " " << res[i].second << "\n";
  return 0;
}
