import java.util.*;
/**
*
* @author cteam039
*/
public class Fn {
public static void main
(String...
args) { int points, lines;
Scanner scan
= new Scanner
(System.
in); while (scan.hasNextInt()) {
iteration(scan);
}
}
public static void iteration(Scanner scan) {
int points, lines;
points = scan.nextInt();
lines = scan.nextInt();
List<List<Graph>> graphs = new ArrayList<List<Fn.Graph>>();
if (points < 2 || lines < 1) {
return;
}
for (int i = 0; i < lines; i++) {
int a = scan.nextInt();
int b = scan.nextInt();
List<List<Graph>> sets = new ArrayList<List<Graph>>();
boolean added = false;
for(List<Graph> graph : graphs){
added = insert(graph, new Graph(a), new Graph(b));
if(added){
sets.add(graph);
}
}
if(!added){
List<Graph> gr= new ArrayList<Graph>();
graphs.add(gr);
gr.add(new Graph(a));
gr.add(new Graph(b));
}
else if(sets.size() > 1) {
for(int j = 1; j < sets.size(); j++){
for(Graph g : sets.get(j)){
if(!sets.get(0).contains(g)){
sets.get(0).add(g);
}
}
graphs.remove(sets.get(j));
}
}
}
for(List<Graph> list : graphs){
int counter = 0;
for(Graph g: list){
if(g.incide == 1){
counter ++;
}
}
if(counter > 3 ){
return;
}
}
}
public static boolean insert(List<Graph> graph, Graph a, Graph b){
if(graph.contains(a)){
if(graph.contains(b)){
return true;
}
else{
graph.get(graph.indexOf(a)).incide++;
graph.add(b);
return true;
}
}
else{
if(graph.contains(b)){
graph.get(graph.indexOf(b)).incide++;
graph.add(a);
return true;
}
else{
return false;
}
}
}
private static class Graph {
int id;
int incide;
public Graph(int id) {
this.id = id;
incide = 1;
}
@Override
public boolean equals
(Object arg0
) { if(!(arg0 instanceof Graph)){
return false;
}
return ((Graph)arg0).id == id;
}
@Override
public int hashCode() {
int hash = 5;
hash = 79 * hash + this.id;
return hash;
}
}
}