structEdge { int u, v; } a[maxn]; int cnt0[maxn], cntx[maxn], cnty[maxn];
voidsolve( ){ int n = read( ), m = read( ); for( int i = 1; i <= m; ++ i ) { int u = read( ), v = read( ); a[i] = {u, v}; cnt0[u] ++, cnt0[v] ++; }
auto [x, y] = a[1]; for( int i = 1; i <= m; ++ i ) { auto [u, v] = a[i]; if( u == x ) cntx[v] ++; if( v == x ) cntx[u] ++; if( u == y ) cnty[v] ++; if( v == y ) cnty[u] ++; }
ll ans = 0; for( int i = 1; i <= n; ++ i ) { if( i == x ) continue; if( cnt0[x] + cnt0[i] - cntx[i] == m ) ans ++; }
for( int i = 1; i <= n; ++ i ) { if( i == x || i == y ) continue; if( cnt0[y] + cnt0[i] - cnty[i] == m ) ans ++; } cout << ans << '\n'; }