#include<bits/stdc++.h>
using namespace std;
#define MAXN 100010
int n,m,ans; int Adj[MAXN],V[MAXN*2],nxt[MAXN*2],c; int Sum[MAXN],vis[MAXN],flag[MAXN],cir,cx,cy,tot; int st[MAXN],r;
void AddEdge(int u,int v) { c++;V[c]=v,nxt[c]=Adj[u];Adj[u]=c; }
void dfs(int u,int p) {
	tot+=Sum[u]; vis[u]=1;
	for(int i=Adj[u];i;i=nxt[i])
		if(V[i]!=p) {
			if(vis[V[i]]) { cx=u,cy=V[i]; cir=(Sum[V[i]]==Sum[u]); continue; }
			Sum[V[i]]=-Sum[u]; dfs(V[i],u);
		}
}
void Solve(int u,int p) { vis[u]=0; for(int i=Adj[u];i;i=nxt[i]) if(V[i]!=p&&vis[V[i]]) { Solve(V[i],u); Sum[u]+=Sum[V[i]]; flag[u]+=flag[V[i]]; } }
int main() {
	scanf("%d%d",&n,&m); int u,v; for(int i=1;i<=m;i++) { scanf("%d%d",&u,&v); AddEdge(u,v); AddEdge(v,u); } Sum[1]=1; dfs(1,0);
	if(m==n-1) { if(tot!=0) { printf("-1\n"); return 0; } }
	else if(cir) { if(tot%2!=0) { printf("-1\n"); return 0; } Sum[cx]-=tot/2; Sum[cy]-=tot/2; ans+=abs(tot)/2; }
	else { if(tot!=0) { printf("-1\n"); return 0; } flag[cx]=-1,flag[cy]=1; }
	Solve(1,0); for(int i=1;i<=n;i++) { if(flag[i]==0) ans+=abs(Sum[i]); else { if(flag[i]==1) Sum[i]=-Sum[i]; st[++r]=Sum[i]; } }
	sort(st,st+r+1); int K=st[r/2]; for(int i=0;i<=r;i++) ans+=abs(st[i]-K);
	printf("%d\n",ans);
}