#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100100;
int i,j,k,n,m,na,En,x,y,X,Y,ch,ff,ans,t;
int h[N],f[N],dp[N],fa[N],a[N];
struct edge { int s,n;} E[N<<1];
void R(int &x) {
	ff=x=0;ch=getchar();
	while (ch<'0' || '9'<ch) { if (ch=='-') ff=1;ch=getchar();}
	while ('0'<=ch && ch<='9') x=x*10+ch-'0',ch=getchar();
	if (ff) x=-x;
}
void E_add(int x,int y) {
	E[++En].s=y;E[En].n=h[x];h[x]=En;
	E[++En].s=x;E[En].n=h[y];h[y]=En;
}
void dfs(int x,int F) {
	dp[x]=dp[F]+1;fa[x]=F;
	if (dp[x]&1) f[x]=1;
	else f[x]=-1;
	for (int k=h[x];k;k=E[k].n) if (E[k].s!=F) {
		if (dp[E[k].s]) X=x,Y=E[k].s;
		else {
			dfs(E[k].s,x);
			f[x]+=f[E[k].s];
		}
	}
}
int main() {
	R(n);R(m);
	for (i=1;i<=m;i++) {
		R(x);R(y);
		E_add(x,y);
	}
	dfs(1,0);
	if (n==m) {
		if ((dp[X]&1)==(dp[Y]&1)) {
			if (f[1]&1) return puts("-1"),0;
			t=-f[1]/2;
			while (X) f[X]+=t,X=fa[X];
			while (Y) f[Y]+=t,Y=fa[Y];
			ans+=abs(t);
		}
		else {
			int tx=X,ty=Y;
			while (dp[X]>dp[Y]) a[++na]=f[X],X=fa[X];
			while (dp[Y]>dp[X]) a[++na]=-f[Y],Y=fa[Y];
			sort(a+1,a+na+1);
			if (na&1) t=-a[na/2+1];
			else {
				if (abs(a[na/2])<abs(a[na/2+1])) t=-a[na/2];
				else t=-a[na/2+1];
			}
			X=tx;Y=ty;
			while (X) f[X]+=t,X=fa[X];
			while (Y) f[Y]-=t,Y=fa[Y];
			ans+=abs(t);
		}
	}
	if (f[1]) return puts("-1"),0;
	for (i=1;i<=n;i++) ans+=abs(f[i]);
	printf("%d\n",ans);
}