#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAXN 100010
int n,m,ans;
int Adj[MAXN],V[MAXN*2],nxt[MAXN*2],c;
void AddEdge(int u,int v)
{
	c++;V[c]=v,nxt[c]=Adj[u];Adj[u]=c;
}
int Sum[MAXN],vis[MAXN],flag[MAXN],cir,cx,cy,tot;
int st[MAXN],r;
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);
}