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

typedef long long ll;
const int N=1e5+10;
int a[N],b[N];
ll sum,ans;

namespace IO {
	int read() {
		int ret=0;
		char c=getchar();
		while(!isdigit(c)) c=getchar();
		while(isdigit(c)) ret=ret*10+(c^48),c=getchar();
		return ret;
	}
	void write(ll x) {
		if(x>9)write(x/10);
		putchar(x%10^48);
	}
	void writeln(ll x) {
		write(x);
		putchar('\n');
	}
}
using namespace IO;

namespace Graph {
	int tot,ban,st,ed,odd;
	int head[N],vis[N],col[N];
	struct Tway {
		int v,nex;
	} e[N<<1];
	void add(int u,int v) {
		e[++tot]=(Tway) {
			v,head[u]
		};
		head[u]=tot;
		e[++tot]=(Tway) {
			u,head[v]
		};
		head[v]=tot;
	}
	void dfs1(int x,int f) {
		vis[x]=1;
		for(int i=head[x]; i; i=e[i].nex) {
			int v=e[i].v;
			if(v==f) continue;
			if(vis[v]) {
				ban=i;
				st=x;
				ed=v;
				if(col[st]==col[ed])odd=1;
			} else col[v]=col[x]^1,dfs1(v,x);

		}
	}
	void dfs2(int x,int f) {
		for(int i=head[x]; i; i=e[i].nex) {
			int v=e[i].v;
			if(v==f || i==ban || (i^1)==ban) continue;
			dfs2(v,x);
			a[x]+=a[v];
			b[x]+=b[v];
		}
	}
}
using namespace Graph;

namespace DreamLolita {
	int n,m,cnt,num[N];
	void failed() {
		puts("-1");
		exit(0);
	}
	void solution() {
		n=read();
		m=read();
		tot=1;
		for(int i=1; i<=m; ++i) add(read(),read());
		col[1]=1;
		dfs1(1,0);
		for(int i=1; i<=n; ++i) a[i]=col[i]?1:-1;
		for(int i=1; i<=n; ++i) sum+=a[i];
		if(m==n-1) {
			if(sum) failed();
		} else if(odd) {
			if(abs(sum)&1) failed();
			a[st]-=sum/2;
			a[ed]-=sum/2;
			ans+=abs(sum/2);
		} else {
			if(sum) failed();
			b[st]=1;
			b[ed]=-1;
		}
		dfs2(1,0);
		for(int i=1; i<=n; ++i)
			if(!b[i]) ans+=abs(a[i]);
			else num[++cnt]=-a[i]; 
		num[++cnt]=0;
		if(cnt) {
			sort(num+1,num+cnt+1);
			int mid=num[(cnt+1)>>1];
			for(int i=1; i<=cnt; ++i) ans+=abs(num[i]-mid);
		}
		writeln(ans);
	}
}

int main() {
	DreamLolita::solution();
	return 0;
}