#include <bits/stdc++.h>
#define int long long
using namespace std;
int read()
{
	int res = 0,f = 1;
	char ch = getchar();
	while (ch<'0'||ch>'9') f = (ch=='-'?-f:f),ch = getchar();
	while (ch>='0'&&ch<='9') res = (res<<3)+(res<<1)+(ch^48),ch = getchar();
	return res*f;
}
void write(int x)
{
	if (x<0) putchar(x),x=-x;
	if (x>9) write(x/10);
	putchar(x%10+'0');
}
void writech(int x,char ch){write(x),putchar(ch);}
const int N = 5005;
int n,m;
vector<pair<int,int> > a[N];
int dfn[N],low[N],dfncnt;
int s[N],tp;
int bcc,bc[N];
int du[N];
void tarjan(int x,int bid)
{
	dfn[x]=low[x]=++dfncnt;
	for (int i = 0; i < a[x].size(); i++)
	{
		int y = a[x][i].first,bb = a[x][i].second;
		if (bb==bid) continue;
		if (!dfn[y]) tarjan(y,bb),low[x]=min(low[x],low[y]);
		else low[x]=min(low[x],dfn[y]);
	}
	if (dfn[x]==low[x])
	{
		++bcc;
		while (s[tp]!=x) bc[s[tp--]]=bcc;
		bc[s[tp--]]=bcc;
	}
}
signed main()
{
	n=read(),m=read();
	for (int i = 1; i <= m; i++)
	{
		int x=read(),y=read();
		a[x].push_back({y,i});
		a[y].push_back({x,i}); 
	}
	for (int i = 1; i <= n; i++) if (!dfn[i]) tarjan(i,0);
	for (int i = 1; i <= n; i++)
	{
		for (int j = 0; j < a[i].size(); j++)
		{
			int x = bc[i],y = bc[a[i][j].first];
			if (x==y) continue;
			du[x]++,du[y]++;
		}
	}
	int ans = 0;
	for (int i = 1; i <= bcc; i++) ans+=du[i]==1;
	write((ans+1)/2);
	return 0;
}