#include <bits/stdc++.h>
const int N=100005;
int f[N],Next[N<<1],c[N],s[N],to[N<<1],last[N],fa[N],x,y,n,m,xx,yy,sum,edge,s2[N],a[N],cnt;
int find(int x){
	if (f[x]==x) return x;
	f[x]=find(f[x]);
	return f[x];
}
void dfs(int x,int fa){
	f[x]=fa;
	s[x]=c[x];
	for (int i=last[x];i;i=Next[i])
		if(to[i]!=fa){
			c[to[i]]=0-c[x];
			dfs(to[i],x);
			s[x]=s[x]+s[to[i]];
		}
}
void add(int x,int y){
	to[++edge]=y;
	Next[edge]=last[x];
	last[x]=edge;
}
int main(){
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;i++) f[i]=i;
	if (n==m)
	for (int i=1;i<=m;i++){
		scanf("%d%d",&x,&y);
		int fx=find(x),fy=find(y);
		if (fx==fy) xx=x,yy=y;
		else{
			add(x,y),add(y,x);
			f[fx]=fy;
		} 
	} 
	else
	for (int i=1;i<=m;i++){
		scanf("%d%d",&x,&y);
		add(x,y),add(y,x);
	}
	memset(f,0,sizeof(f));
	c[1]=1;
	dfs(1,0);
	if (m<n){
		if (s[1]) puts("-1");
		else{
			for (int i=1;i<=n;i++) sum=sum+abs(s[i]);
			printf("%d",sum);
		}
	}else if (c[xx]==c[yy]){
		if (s[1]&1){
			puts("-1");
			return 0;
		}
		int t=-s[1]/2;
		for (;xx;xx=f[xx]) s[xx]+=t;
		for (;yy;yy=f[yy]) s[yy]+=t;
		for (int i=1;i<=n;i++) sum=sum+abs(s[i]);
		printf("%d",sum+abs(t));
	}else{
		if (s[1]){
			puts("-1");
			return 0;
		}
		for (;xx;xx=f[xx]) s2[xx]+=1;
		for (;yy;yy=f[yy]) s2[yy]-=1;
		for (int i=1;i<=n;i++) 
			if (s2[i]==1) a[++cnt]=s[i];
			else if (s2[i]==2) a[++cnt]=s[i],a[++cnt]=s[i];
			else if (s2[i]==-1) a[++cnt]=-s[i];
			else if (s2[i]==-2) a[++cnt]=-s[i],a[++cnt]=-s[i];
		std::sort(a+1,a+cnt+1);
		int t=-a[cnt/2+1];
		for (int i=1;i<=n;i++) sum=sum+abs(s2[i]*t+s[i]);
		printf("%d\n",sum+abs(t));
	}
}