#include<bits/stdc++.h>
#define N 100009
using namespace std;

int n,m,tx,ty,tot,tp,a[N],q[N],fst[N],pnt[N<<1],nxt[N<<1];
int f[N],g[N],c[N],d[N],fa[N]; bool vis[N],dlt[N]; long long ans;
void add(int x,int y){
	pnt[++tot]=y; nxt[tot]=fst[x]; fst[x]=tot;
}
void dfs(int x){
	int i,y; vis[x]=1; f[x]=d[x]&1; g[x]=f[x]^1;
	for (i=fst[x]; i; i=nxt[i]){
		y=pnt[i];
		if (dlt[y]) continue;
		if (!vis[y]){
			fa[y]=x; d[y]=d[x]^1;
			dfs(y);
			f[x]+=f[y]; g[x]+=g[y];
		} else if (y!=fa[x] && !tx){
			tx=x; ty=y;
		}
	}
	c[x]=f[x]-g[x];
	if (fa[x] && !dlt[x]) ans+=abs(c[x]);
}
void gg(){ puts("-1"); exit(0); }
int main(){
	scanf("%d%d",&n,&m);
	if (n&1) gg();
	int i,x,y;
	for (i=1; i<=m; i++){
		scanf("%d%d",&x,&y);
		add(x,y); add(y,x);
	}
	dfs(1);
	if (!tx){ tx=n; ty=fa[n]; }
	if (!(d[tx]^d[ty])){
		if (c[1]&1) gg();
		x=c[1]/2;
	} else if (c[1]) gg();
	for (i=tx; i!=ty; i=fa[i]) q[++tp]=i; q[++tp]=ty;
	for (i=1; i<=tp; i++) dlt[q[i]]=1;
	ans=0;
	memset(vis,0,sizeof(vis));
	for (i=1; i<=tp; i++) dfs(q[i]);
	for (i=1; i<tp; i++) a[i]=a[i-1]+c[q[i]];
	if (d[tx]^d[ty]){
		sort(a+1,a+tp+1);
		x=a[tp+1>>1];	
	}
	for (i=1; i<=tp; i++) ans+=abs(x-a[i]);	
	printf("%lld\n",ans);
	return 0;
}
