#include <bits/stdc++.h> // NeOWami
using namespace std;
#define ft first
#define sc second
#define int long long
const int inf = 1e18;
const int N = 1e3 + 5;
int n, m;
int D[N];
struct Dinic {
struct Edge {
int v, rev;
long long cap, flow;
};
long long INF = 4e18;
int N;
vector<vector<Edge>> G;
vector<int> level, curEdge;
Dinic (int n = 0) {
init(n);
};
void init(int n) {
N = n;
G.assign(n, {});
}
void addEdge(int u, int v, long long cap) {
Edge a{v, (int)G[v].size(), cap, 0};
Edge b{u, (int)G[u].size(), 0, 0};
G[u].push_back(a);
G[v].push_back(b);
}
bool bfs(int s, int t) {
level.assign(N, -1);
level[s] = 0;
queue<int> Q;
Q.push(s);
while(!Q.empty() && level[t] == -1) {
int u = Q.front(); Q.pop();
for (Edge &e: G[u]) {
if (e.cap > e.flow && level[e.v] == -1) {
level[e.v] = level[u] + 1;
Q.push(e.v);
}
}
}
return level[t] != -1;
}
long long dfs(int u, int t, long long f) {
if (!f || u == t) return f;
for (int &i = curEdge[u]; i < (int)G[u].size(); i++) {
Edge &e = G[u][i];
if (e.cap > e.flow && level[e.v] == level[u] + 1) {
long long val = dfs(e.v, t, min(f, e.cap - e.flow));
if (val) {
e.flow += val;
G[e.v][e.rev].flow -= val;
return val;
}
}
}
return 0;
}
long long maxFlow(int s, int t) {
long long flow = 0;
while(bfs(s, t)) {
curEdge.assign(N, 0);
while(long long f = dfs(s, t, INF)) {
flow += f;
}
}
return flow;
}
};
signed main() {
cin.tie(NULL)->sync_with_stdio(false);
if(ifstream("Input.inp")) {
freopen("Input.inp", "r", stdin);
freopen("Output.out", "w", stdout);
}
cin >> n >> m;
Dinic dinic(n + 5);
int s = n + 1, t = n + 2;
for (int i = 1; i <= m; i++) {
int u, v; cin >> u >> v;
D[u]--;
D[v]++;
dinic.addEdge(u, v, inf);
}
int sum = 0;
for (int i = 1; i <= n; ++i) {
if (D[i] > 0) {
dinic.addEdge(s, i, D[i]);
sum += D[i];
} else if (D[i] < 0) dinic.addEdge(i, t, -D[i]);
}
int maxflow = dinic.maxFlow(s, t);
cout << sum - maxflow << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IC8vIE5lT1dhbWkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZnQgZmlyc3QKI2RlZmluZSBzYyBzZWNvbmQKI2RlZmluZSBpbnQgbG9uZyBsb25nCmNvbnN0IGludCBpbmYgPSAxZTE4Owpjb25zdCBpbnQgTiA9IDFlMyArIDU7CmludCBuLCBtOwppbnQgRFtOXTsKc3RydWN0IERpbmljIHsKICAgIHN0cnVjdCBFZGdlIHsKICAgICAgICBpbnQgdiwgcmV2OwogICAgICAgIGxvbmcgbG9uZyBjYXAsIGZsb3c7CiAgICB9OwogICAgbG9uZyBsb25nIElORiA9IDRlMTg7CiAgICBpbnQgTjsKICAgIHZlY3Rvcjx2ZWN0b3I8RWRnZT4+IEc7CiAgICB2ZWN0b3I8aW50PiBsZXZlbCwgY3VyRWRnZTsKICAgIERpbmljIChpbnQgbiA9IDApIHsKICAgICAgICBpbml0KG4pOwogICAgfTsKICAgIHZvaWQgaW5pdChpbnQgbikgewogICAgICAgIE4gPSBuOwogICAgICAgIEcuYXNzaWduKG4sIHt9KTsKICAgIH0KICAgIHZvaWQgYWRkRWRnZShpbnQgdSwgaW50IHYsIGxvbmcgbG9uZyBjYXApIHsKICAgICAgICBFZGdlIGF7diwgKGludClHW3ZdLnNpemUoKSwgY2FwLCAwfTsKICAgICAgICBFZGdlIGJ7dSwgKGludClHW3VdLnNpemUoKSwgMCwgMH07CiAgICAgICAgR1t1XS5wdXNoX2JhY2soYSk7CiAgICAgICAgR1t2XS5wdXNoX2JhY2soYik7CiAgICB9CgogICAgYm9vbCBiZnMoaW50IHMsIGludCB0KSB7CiAgICAgICAgbGV2ZWwuYXNzaWduKE4sIC0xKTsKICAgICAgICBsZXZlbFtzXSA9IDA7CiAgICAgICAgcXVldWU8aW50PiBROwogICAgICAgIFEucHVzaChzKTsKICAgICAgICAKICAgICAgICB3aGlsZSghUS5lbXB0eSgpICYmIGxldmVsW3RdID09IC0xKSB7CiAgICAgICAgICAgIGludCB1ID0gUS5mcm9udCgpOyBRLnBvcCgpOwogICAgICAgICAgICBmb3IgKEVkZ2UgJmU6IEdbdV0pIHsKICAgICAgICAgICAgICAgIGlmIChlLmNhcCA+IGUuZmxvdyAmJiBsZXZlbFtlLnZdID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgbGV2ZWxbZS52XSA9IGxldmVsW3VdICsgMTsKICAgICAgICAgICAgICAgICAgICBRLnB1c2goZS52KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbGV2ZWxbdF0gIT0gLTE7CiAgICB9CiAgICBsb25nIGxvbmcgZGZzKGludCB1LCBpbnQgdCwgbG9uZyBsb25nIGYpIHsKICAgICAgICBpZiAoIWYgfHwgdSA9PSB0KSByZXR1cm4gZjsKICAgICAgICBmb3IgKGludCAmaSA9IGN1ckVkZ2VbdV07IGkgPCAoaW50KUdbdV0uc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgRWRnZSAmZSA9IEdbdV1baV07CiAgICAgICAgICAgIGlmIChlLmNhcCA+IGUuZmxvdyAmJiBsZXZlbFtlLnZdID09IGxldmVsW3VdICsgMSkgewogICAgICAgICAgICAgICAgbG9uZyBsb25nIHZhbCA9IGRmcyhlLnYsIHQsIG1pbihmLCBlLmNhcCAtIGUuZmxvdykpOwogICAgICAgICAgICAgICAgaWYgKHZhbCkgewogICAgICAgICAgICAgICAgICAgIGUuZmxvdyArPSB2YWw7CiAgICAgICAgICAgICAgICAgICAgR1tlLnZdW2UucmV2XS5mbG93IC09IHZhbDsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgfQogICAgbG9uZyBsb25nIG1heEZsb3coaW50IHMsIGludCB0KSB7CiAgICAgICAgbG9uZyBsb25nIGZsb3cgPSAwOwogICAgICAgIHdoaWxlKGJmcyhzLCB0KSkgewogICAgICAgICAgICBjdXJFZGdlLmFzc2lnbihOLCAwKTsKICAgICAgICAgICAgd2hpbGUobG9uZyBsb25nIGYgPSBkZnMocywgdCwgSU5GKSkgewogICAgICAgICAgICAgICAgZmxvdyArPSBmOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmbG93OwogICAgfQp9OwpzaWduZWQgbWFpbigpIHsKICAgIGNpbi50aWUoTlVMTCktPnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBpZihpZnN0cmVhbSgiSW5wdXQuaW5wIikpIHsKICAgICAgICBmcmVvcGVuKCJJbnB1dC5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKCJPdXRwdXQub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQogICAgY2luID4+IG4gPj4gbTsKICAgIERpbmljIGRpbmljKG4gKyA1KTsKICAgIGludCBzID0gbiArIDEsIHQgPSBuICsgMjsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG07IGkrKykgewogICAgICAgIGludCB1LCB2OyBjaW4gPj4gdSA+PiB2OwogICAgICAgIERbdV0tLTsKICAgICAgICBEW3ZdKys7CiAgICAgICAgZGluaWMuYWRkRWRnZSh1LCB2LCBpbmYpOwogICAgfQoKICAgIGludCBzdW0gPSAwOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB7CiAgICAgICAgaWYgKERbaV0gPiAwKSB7CiAgICAgICAgICAgIGRpbmljLmFkZEVkZ2UocywgaSwgRFtpXSk7CiAgICAgICAgICAgIHN1bSArPSBEW2ldOwogICAgICAgIH0gZWxzZSBpZiAoRFtpXSA8IDApIGRpbmljLmFkZEVkZ2UoaSwgdCwgLURbaV0pOwogICAgfQoKICAgIGludCBtYXhmbG93ID0gZGluaWMubWF4RmxvdyhzLCB0KTsKICAgIGNvdXQgPDwgc3VtIC0gbWF4ZmxvdyA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0=