#include<bits/stdc++.h>
#define pb push_back
#define fi first
#define se second

using namespace std;
typedef long long ll;
typedef pair<ll,int>pi;

const int N=100005;

int n,m,st[N],tp,col[N],cnum[2];
vector<int>e[N],vcr;
bool ist[N],in[N],vis[N];

void dfs(int x,int fa){
	if(ist[x]){
		int p=tp;
		while(st[p]!=x)vcr.pb(st[p]),in[st[p]]=true,p--;
		vcr.pb(x);in[x]=true;
	}
	if(vis[x])return;
	st[++tp]=x,ist[x]=true,vis[x]=true,cnum[col[x]=!col[fa]]++;
	for(int v:e[x])if(v!=fa)dfs(v,x);
	st[tp--]=0,ist[x]=false;
}

template<class T>inline T abs_(T x){return x<0?-x:x;}

pi dp(int x,int fa){
	pi a={0,col[x]?1:-1};
	for(int v:e[x])if(v!=fa&&!in[v]){
		pi b=dp(v,x);
		a.fi+=b.fi+abs_(b.se);a.se+=b.se;
	}
	return a;
}

void work1(){
	if(cnum[0]!=cnum[1])puts("-1"),exit(0);
	printf("%lld\n",dp(1,0).fi);
}

void work2(){
	int len=vcr.size();
	bool even=len%2==0;
	if(even&&cnum[0]!=cnum[1])puts("-1"),exit(0);
	vector<int>arr;
	ll ans=0,now=0;
	for(int p:vcr){
		pi a=dp(p,0);
		if(even)arr.pb(now);else arr.pb(a.se);
		ans+=a.fi;now+=a.se;
	}
	if(!even){
		if(now<0){
			now=-now;
			for(int i=0;i<arr.size();i++)arr[i]=-arr[i];
		}
		int p=0;
		while(col[vcr[p]]!=col[vcr[(p+1)%len]])p++;
		ans+=now>>1,arr[p]-=now>>1,arr[(p+1)%len]-=now>>1;
		int q=(p+1)%len;now=0;
		do ans+=abs_(now+=arr[q]),q=(q+1)%len;while(q!=p);
	}else{
		nth_element(arr.begin(),arr.begin()+(arr.size()/2),arr.end());
		ll x=arr[arr.size()/2];
		for(int p:arr)ans+=abs_(p-x);
	}
	printf("%lld\n",ans);
}

int main(){
	scanf("%d%d",&n,&m);
	for(int i=1,u,v;i<=m;i++)scanf("%d%d",&u,&v),e[u].pb(v),e[v].pb(u);
	if(n%2==1)puts("-1"),exit(0);
	dfs(1,0);
	if(vcr.size()==0)work1(),exit(0);
	work2();
	return 0;
}