class UF: def __init__(self,n): self.p = [-1]*n def f(self,x): if self.p[x]<0: return x else: self.p[x] = self.f(self.p[x]); return self.p[x] def u(self,x,y): x = self.f(x); y = self.f(y) if x==y: return if -self.p[x]<-self.p[y]: x,y = y,x self.p[x] += self.p[y]; self.p[y] = x n,m = map(int,input().split()) a = [0]*n; b = [0]*n; c = [[] for _ in range(n)]; uf = UF(n) for _ in range(m): u,v = map(int,input().split()) a[u-1] += 1; b[v-1] += 1; uf.u(u-1,v-1) ans = 0 for i,(u,v) in enumerate(zip(a,b)): if u>v or u==v>0: c[uf.f(i)].append(u-v) p = q = ans = 0 for i in range(n): if c[i]: p += 1; ans += sum(c[i]) if sum(c[i])==0: q += 1 print(q-1 if p==q else max(ans-1,0)+q)