#include <bits/stdc++.h>
using namespace std;
vector<int> g[101010];
int color[101010];
int black, white, type, cnt;
int s, t;
long long ans;
bool in_s[101010], in_t[101010];
vector<long long> flow;
void check(int v, int prev, int d) {
  color[v] = d;
  if (d & 1)
    black++;
  else
    white++;
  for (auto u : g[v])
    if (u != prev) {
      if (color[u] == -1) {
        check(u, v, 1 - d);
      } else {
        s = v;
        t = u;
        if (color[u] == 1 - d) {
          type = 1;
        } else {
          type = 2;
        }
      }
    }
}
pair<long long, long long> dfs(int v, int prev, int d) {
  long long b = 0, w = 0;
  for (auto u : g[v])
    if (u != prev) {
      pair<int, int> get = dfs(u, v, d + 1);
      b += get.first;
      w += get.second;
    }
  if (d & 1)
    b++;
  else
    w++;
  if (type == 2 && (v == s || v == t)) b -= cnt;
  ans += abs(b - w);
  return make_pair(b, w);
}
pair<long long, long long> dfs2(int v, int prev, int d) {
  long long b = 0, w = 0;
  in_s[v] = false, in_t[v] = false;
  if (v == s) in_s[v] = true;
  if (v == t) in_t[v] = true;
  for (auto u : g[v])
    if (u != prev) {
      pair<int, int> get = dfs2(u, v, d + 1);
      in_s[v] |= in_s[u];
      in_t[v] |= in_t[u];
      b += get.first;
      w += get.second;
    }
  if (d & 1)
    b++;
  else
    w++;
  if ((in_s[v] && in_t[v]) || (!in_s[v] && !in_t[v])) {
    ans += abs(b - w);
  } else {
    flow.push_back(b - w);
  }
  return make_pair(b, w);
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    a--, b--;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  type = 0;
  memset(color, -1, sizeof color);
  check(0, -1, 0);
  if ((type == 0 && black != white) || (type == 1 && black != white) ||
      (type == 2 && black % 2 != white % 2)) {
    puts("-1");
    return 0;
  }
  if (type == 0) dfs(0, -1, 0);
  g[s].erase(remove(g[s].begin(), g[s].end(), t), g[s].end());
  g[t].erase(remove(g[t].begin(), g[t].end(), s), g[t].end());
  if (type == 1) {
    dfs2(0, -1, 0);
    long long lb = -101010, ub = 101010;
    while (ub - lb > 3) {
      int left = (lb * 2 + ub) / 3;
      int right = (lb + ub * 2) / 3;
      int left_ans = 0, right_ans = 0;
      for (auto f : flow) {
        left_ans += abs(left + f);
        right_ans += abs(right + f);
      }
      if (left_ans < right_ans)
        ub = right;
      else
        lb = left;
    }
    long long res = 0x3f3f3f3f;
    for (long long i = lb - 10; i < lb + 10; i++) {
      long long sum = 0;
      for (auto f : flow) sum += abs(i + f);
      sum += abs(i);
      res = min(res, sum);
    }
    ans += res;
  }
  if (type == 2) {
    cnt = (black - white) / 2;
    dfs(0, -1, 0);
    ans += abs(cnt);
  }
  printf("%lld\n", ans);
  return 0;
}
