#include<bits/stdc++.h>
const int maxn=1e5;
const int mod=19260817;
inline const void read(int &a)
{
char c=getchar();int b=1;a=0;
while(c<'0'||c>'9'){if(c=='-')b=-1;c=getchar();}
while(c>='0'&&c<='9')
{
a=(a<<1)+(a<<3)+c-'0';
c=getchar();
}
a*=b;
}
inline const void write(int a)
{
if(a<0){putchar('-');a=-a;}
if(a>9)write(a/10);
putchar(a%10+'0');
}
int point[maxn],d=0,belong[maxn],tt=0,next[maxn],to[maxn];
inline const void add(int a,int b)
{
next[++d]=point[a];
to[d]=b;
point[a]=d;
}
TARJAN
{
std::stack<int> path;
int low[maxn],dfs[maxn];
bool in_stack[maxn];
void tarjan(int p)
{
dfs[p]=low[p]=++tt;
int side=point[p];
while(side)
{
if(!vis[to[side]])
{
}
else
if(in_stack[to[side]])
{
}
side=next[side];
}
if(low[p]==dfs[p])
{
while(path.top()!=p)
{
belong[path.top()]=p;
path.pop();
}
belong[path.top()]=p;
path.pop();
}
}
}tarj;
int main()
{
memset(point,0,sizeof(point));
read(n);read(m);int u,v;
for(int i=1;i<=m;i++)
{
read(u);read(v);
add(u,v);add(v,u);
}
tarj.tarjan(1);
return 0;
}