#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 5;
struct E{
	int to, nxt;
}e[maxn << 1];
int head[maxn], tot = 0;
void addedge(int u, int v){
	e[++tot].to = v, e[tot].nxt = head[u];
	head[u] = tot;
}
int s[maxn], dep[maxn], f[maxn]; int cu, cv;
void dfs(int cur, int fa){
	dep[cur] = dep[fa] + 1;
	f[cur] = fa;
	if (dep[cur] & 1) s[cur] = 1;
	else s[cur] = -1;
	for (int i = head[cur]; i; i = e[i].nxt){
		int v = e[i].to;
		if (v != fa){
			if (dep[v]){
				if (cu == 0) cu = cur, cv = v;
			}
			else dfs(v, cur), s[cur] += s[v];
		}
	}
}
int n, m;
int abs(int x){return x < 0 ? -x : x;}
void work1(){
	if (s[1] != 0){puts("-1"); exit(0);}
	int ans = 0;
	for (int i = 1; i <= n; i++) ans += abs(s[i]);
	printf("%d\n", ans); exit(0);
}
void work2(){
	if (s[1] % 2 != 0){puts("-1"); exit(0);}
	int t = -s[1] / 2;
	int ans = abs(t);
	for (; cu; cu = f[cu]) s[cu] += t;
	for (; cv; cv = f[cv]) s[cv] += t;
	for (int i = 1; i <= n; i++) ans += abs(s[i]);
	printf("%d\n", ans); exit(0);
}
vector <int> v;
void work3(){
	if (s[1] != 0){puts("-1"); exit(0);}
	for (; cu != cv; cu = f[cu]) dep[cu] = 0, v.push_back(s[cu]);
	sort(v.begin(), v.end());
	int mid = v[(v.size() - 1) / 2];
	int ans = abs(mid);
	for (int i = 1; i <= n; i++)
		if (dep[i] != 0) ans += abs(s[i]);
		else ans += abs(s[i] - mid);
	printf("%d\n", ans); exit(0);
}
int main(){
	scanf("%d%d", &n, &m);
	for (int u, v, i = 1; i <= m; i++){
		scanf("%d%d", &u, &v);
		addedge(u, v); addedge(v, u);
	} dfs(1, 0);
	if (m == n - 1) work1();
	if ((dep[cu] - dep[cv]) % 2 == 0) work2();
	work3();
	return 0;
}
