#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 4;
const int inf = 1e9;
const int mod = 1e9 + 7;
map<pair<int, int>, bool> edge;
int deg[10];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.precision(20);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    u--, v--;
    edge[make_pair(u, v)] = true, edge[make_pair(v, u)] = true;
  }
  if (n < 8) {
    vector<pair<int, int> > v;
    for (int i = 0; i < n; i++)
      for (int j = i + 1; j < n; j++) v.push_back(make_pair(i, j));
    int k = v.size();
    for (int mask = 1; mask < (1 << k); mask++) {
      if (__builtin_popcount(mask) != m) continue;
      for (int i = 0; i < n; i++) deg[i] = 0;
      bool flag = true;
      for (int i = 0; i < k; i++)
        if ((mask & (1 << i)) && edge[make_pair(v[i].first, v[i].second)])
          flag = false;
      if (!flag) continue;
      for (int i = 0; i < k; i++) {
        if (mask & (1 << i)) {
          deg[v[i].first]++;
          deg[v[i].second]++;
        }
      }
      flag = true;
      for (int i = 0; i < n; i++)
        if (deg[i] > 2) flag = false;
      if (flag) {
        for (int i = 0; i < k; i++)
          if (mask & (1 << i))
            cout << v[i].first + 1 << " " << v[i].second + 1 << endl;
        return 0;
      }
    }
    cout << -1;
    return 0;
  } else {
    set<pair<int, int> > ans;
    set<int> not_used;
    for (int i = 1; i < n; i++) not_used.insert(i);
    int lst = 0;
    while (true) {
      bool flag = false;
      for (set<int>::iterator it = not_used.begin(); it != not_used.end();
           it++) {
        int u = *it;
        if (!edge[make_pair(u, 0)] && !edge[make_pair(u, lst)]) {
          flag = true;
          ans.insert(make_pair(lst, u));
          lst = u;
          not_used.erase(u);
          break;
        }
      }
      if (!flag) break;
    }
    ans.insert(make_pair(0, lst));
    for (set<int>::iterator it = not_used.begin(); it != not_used.end(); it++) {
      int u = *it;
      for (set<pair<int, int> >::iterator it2 = ans.begin(); it2 != ans.end();
           it2++) {
        int v1 = (*it2).first, v2 = (*it2).second;
        if (!edge[make_pair(u, v1)] && !edge[make_pair(u, v2)]) {
          ans.erase(make_pair(v1, v2));
          ans.insert(make_pair(v1, u));
          ans.insert(make_pair(u, v2));
          break;
        }
      }
    }
    set<pair<int, int> >::iterator it = ans.begin();
    for (int i = 0; i < m; i++) {
      cout << (*it).first + 1 << " " << (*it).second + 1 << endl;
      it++;
    }
  }
  return 0;
}
