#include<bits/stdc++.h>
using namespace std;
const int N=50;
int n,m,p[N];
int find(int x){
if(x!=p[x]) p[x]=find(p[x]);
return p[x];
}
struct node{
int a,b,c;
};
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) p[i]=i;
for(int i=0;i<m;i++){
int x,y;
scanf("%d%d",&x,&y);
x=find(x),y=find(y);
if(x!=y) p[x]=y;
}
vector<int>r[N];
for(int i=1;i<=n;i++){
int x=find(i);
if(r[x].size()==3){
cout<<-1;
return 0;
}
r[x].push_back(i);
}
queue<int>q;
for(int i=1;i<=n;i++){
if(r[i].size()==1) q.push(i);
}
vector<node>ans;
for(int i=1;i<=n;i++){
if(r[i].size()==3){
ans.push_back({r[i][0],r[i][1],r[i][2]});
}
else if(r[i].size()==2){
if(q.size()==0){
cout<<-1;
return 0;
}
ans.push_back({r[i][0],r[i][1],q.front()});
q.pop();
}
}
for(int i=0;i<ans.size();i++){
node v=ans[i];
printf("%d %d %d\n",v.a,v.b,v.c);
}
int cnt=0;
while(q.size()){
cout<<q.front()<<" ";
q.pop();
cnt++;
if(cnt==3){
cnt=0;
cout<<endl;
}
}
return 0;
}