#include<bits/stdc++.h>
using namespace std;
struct edge{int to,nxt;}e[200005];
int n,m,et,rx,rt,head[100005],fa[100005],a[100005],tot,b[100005],r;
inline void adde(int x,int y) {e[++tot]=(edge){y,head[x]},head[x]=tot;}
inline int getf(int x) {return fa[x]==x?x:fa[x]=getf(fa[x]);}
inline void dfs(int x,int fl,int f=0)
{
	a[x]=fl,fa[x]=f;
	for(int i=head[x];i;i=e[i].nxt) if(e[i].to!=f) dfs(e[i].to,-fl,x),a[x]+=a[e[i].to];
}
int main()
{
	scanf("%d%d",&n,&m),et=0,rt=1,memset(head,0,sizeof(head));
	for(int i=1;i<=n;i++) fa[i]=i;
	for(int i=1,x,y;i<=m;i++) {scanf("%d%d",&x,&y);if(getf(x)!=getf(y)) adde(x,y),adde(y,x),fa[getf(x)]=getf(y);else rt=x,rx=y;}
	memset(a,0,sizeof(a)),fa[rt]=0,dfs(rt,1),tot=0,r=0;
	if(n!=m) {if(a[rt]) return puts("-1"),0;}
	else
	{
		for(int x=rx;x;x=fa[x]) b[++tot]=a[x];
		if(tot&1)
		{
			if(a[rt]&1) return puts("-1"),0;
			for(int x=rx;x;x=fa[x]) a[x]-=(a[rt]>>1);
		}
		else
		{
			if(a[rt]) return puts("-1"),0;
			sort(b+1,b+tot+1);
			for(int x=rx;x;x=fa[x]) a[x]-=b[tot>>1];
		}
	}
	for(int i=1;i<=n;i++) r+=abs(a[i]);
	return printf("%d\n",r),0;
}