int n , m; int A[MAXN]; vi G[MAXN]; int w[MAXN] , od , ev , s = 0; int lu , lv , fa[MAXN]; voiddfs( int u , int f , int wu ){ w[u] = wu , s += wu; for( int v : G[u] ) if( v != f ) { if( w[v] ) { if( w[v] * w[u] > 0 ) od = 1; else ev = 1; lu = u , lv = v; } else { fa[v] = u; dfs( v , u , wu * -1 ); } } } int dep[MAXN]; voidcfs( int u , int f ){ dep[u] = dep[f] + 1; for( int v : G[u] ) if( v != f ) { if( dep[v] ) continue; cfs( v , u ); w[u] += w[v]; } } int onc[MAXN]; voidsolve(){ cin >> n >> m; rep( i , 1 , m ) { staticint u , v; scanf("%d%d",&u,&v); G[u].pb( v ) , G[v].pb( u ); } dfs( 1 , 1 , 1 ); if( s & 1 ) returnvoid( puts("-1") ); ll res = 0; if( od ) { w[lu] -= s >> 1 , w[lv] -= s >> 1; res += abs( s >> 1 ); s = 0; } if( s ) returnvoid( puts("-1") ); cfs( 1 , 1 ); if( ev ) { vi ps; if( dep[lu] < dep[lv] ) swap( lu , lv ); while( dep[lu] != dep[lv] ) onc[lu] = 1 , ps.pb( w[lu] ) , lu = fa[lu]; ps.pb( 0 ); sort( all( ps ) ); int t = ps[ps.size() / 2]; for( int x : ps ) res += abs( x - t ); } rep( i , 1 , n ) if( !onc[i] ) res += abs( w[i] ); printf("%lld\n",res); } signedmain(){ // int T;cin >> T;while( T-- ) solve(); solve(); }