#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define N 100005
#define ll long long
ll ans;
int n, m, S, T, A[N], siz[N];
int stk[N], top;
int tar[N << 1], nex[N << 1], fir[N], cnt;
bool odd;
void Add(int x, int y)
{
	++cnt;
	tar[cnt] = y;
	nex[cnt] = fir[x];
	fir[x] = cnt;
}
void Dfs1(int x, int fa)
{
	for (int i = fir[x]; i; i = nex[i])
	{
		int v = tar[i];
		if (v == fa)
			continue;
		if (siz[v])
		{
			if (siz[x] == siz[v])
				odd = 1;
			S = x, T = v;
		}
		else
		{
			siz[v] = -siz[x];
			Dfs1(v, x);
		}
	}
}
void Dfs2(int x, int fa)
{
	for (int i = fir[x]; i; i = nex[i])
	{
		int v = tar[i];
		if (v == fa || (x == S && v == T) || (x == T && v == S))
			continue;
		Dfs2(v, x);
		siz[x] += siz[v];
		A[x] += A[v];
	}
}
int main()
{
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= m; i++)
	{
		int x, y;
		scanf("%d%d", &x, &y);
		Add(x, y), Add(y, x);
	}
	siz[1] = 1, Dfs1(1, 0);
	int sum = 0;
	for (int i = 1; i <= n; i++)
		sum += siz[i];
	if (m == n - 1)
	{
		if (sum)
		{
			puts("-1");
			return 0;
		}
	}
	else
	{
		if (odd)
		{
			if (sum & 1)
			{
				puts("-1");
				return 0;
			}
			ans += abs(sum>>1);
			siz[S] -= sum >> 1;
			siz[T] -= sum >> 1;
		}
		else
		{
			if (sum)
			{
				puts("-1");
				return 0;
			}
			else
				A[S] = 1, A[T] = -1;
		}
	}
	Dfs2(1, 0);
	for (int i = 1; i <= n; i++)
	{
		if (A[i])
			stk[++top] = A[i] * siz[i];
		else
			ans += abs(siz[i]);
	}
	stk[++top] = 0;
	sort(stk + 1, stk + top + 1);
	int mid = stk[(top + 1) >> 1];
	for (int i = 1; i <= top; i++)
		ans += abs(stk[i] - mid);
	printf("%lld\n", ans);
}
