#include <bits/stdc++.h>
#define rep(i,n)for(int i=0;i<(n);i++)
using namespace std;

vector<int>E[100000];
int ord[100000],low[100000],k;
bool used[100000];
vector<int>V;

void dfs(int v,int p){
	used[v]=true;
	ord[v]=low[v]=k++;
	bool flag=false;
	int cnt=0;
	for(auto u:E[v]){
		if(!used[u]){
			cnt++;
			dfs(u,v);
			low[v]=min(low[v],low[u]);
			if(low[u]>=ord[v])flag=true;
		}
		else if(u!=p){
			low[v]=min(low[v],ord[u]);
		}
	}
	if(p==-1){
		if(cnt>1)V.push_back(v);
	}
	else if(flag)V.push_back(v);
}
int main(){
	int v,e;scanf("%d%d",&v,&e);
	rep(i,e){
		int s,t;scanf("%d%d",&s,&t);
		E[s].push_back(t);
		E[t].push_back(s);
	}
	dfs(0,-1);
	sort(V.begin(),V.end());
	for(auto i:V)cout<<i<<endl;
}