#include<bits/stdc++.h>
using namespace std;
#define nn 100008
#define ll long long
vector<int> v[nn];
vector<int> cir;int pa[nn];
int siz[nn];int dep[nn];
int n,m;ll ans;
int c0,c1;

int vis[nn];int tag[nn];
void dfs(int x,int p)
{
	pa[x]=p;vis[x]=1;
	for(int i=0;i<v[x].size();i++)
	{
		int y=v[x][i];
		if(y==p) continue;
		if(!vis[y]) dfs(y,x);
		else if(!cir.size())
		{
			int xx=x;
			while(xx!=y) cir.push_back(xx),xx=pa[xx];
			cir.push_back(y);
		}
	}
}
void efs(int x)
{
	siz[x]=tag[x];if(tag[x]<0) c0++;else c1++;
	for(int i=0;i<v[x].size();i++)
	{
		int y=v[x][i];
		if(!tag[y]) 
			tag[y]=-tag[x],efs(y),siz[x]+=siz[y];
	}
}



void makeit(int x)
{
	for(int i=0;i<cir.size();i++)
	{
		ans+=abs(x);
		x=siz[cir[i]]-x;x=-x;
	}
	printf("%lld\n",ans);		
}
int main()
{
	tag[0]=1;
	#define err return 0*puts("-1");
	#define output return 0*printf("%lld\n",ans);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int x,y;scanf("%d%d",&x,&y);
		v[x].push_back(y);v[y].push_back(x);
	}
	
	if(m<n)
	{
		tag[1]=1;efs(1);
		if(c0!=c1) err;
		for(int i=1;i<=n;i++) ans+=abs(siz[i]);
		output;
	}
	else
	{
		dfs(1,0);memset(vis,0,sizeof vis);
		int tot=0;
			
		for(int i=0;i<cir.size();i++) tag[cir[i]]=(i%2==0)*2-1;
		for(int i=0;i<cir.size();i++) efs(cir[i]),tot+=siz[cir[i]],ans-=abs(siz[cir[i]]);
		for(int i=1;i<=n;i++) ans+=abs(siz[i]);
			
		if(cir.size()%2==1)
		{
			if(tot%2) err;
			
			makeit(tot/2);
		}
		else
		{
			if(tot) err;
			
			int x=0,y=-1;vector<int> all;
			for(int i=0;i<cir.size();i++)
			{
				all.push_back(x*y);
			//	y=-y;
				x=siz[cir[i]]-x;
				x=-x;
			}
			
			sort(all.begin(),all.end());
			makeit(all[all.size()/2]);	
		}
	}
	
	
	return 0;
}