#include <bits/stdc++.h>
using namespace std;
vector<int> v[100005];
int dep[100005];
void dfs1(int first, int f) {
  dep[first] = dep[f] + 1;
  for (auto it : v[first]) {
    if (it != f) {
      dfs1(it, first);
    }
  }
}
long long ans;
pair<multiset<int>, multiset<int> > dfs(int first, int f) {
  pair<multiset<int>, multiset<int> > p;
  for (auto it : v[first]) {
    if (it != f) {
      auto pp = dfs(it, first);
      if (pp.first.size() > p.first.size()) {
        swap(pp.first, p.first);
      }
      if (pp.second.size() > p.second.size()) {
        swap(pp.second, p.second);
      }
      for (auto it : pp.first) p.first.insert(it);
      for (auto it : pp.second) p.second.insert(it);
    }
  }
  if (dep[first] & 1) {
    p.first.insert(dep[first]);
  } else {
    p.second.insert(dep[first]);
  }
  while (p.first.size() && p.second.size()) {
    int a = *p.first.rbegin();
    int b = *p.second.rbegin();
    ans += a + b - dep[first] * 2;
    p.first.erase(p.first.find(a));
    p.second.erase(p.second.find(b));
  }
  return p;
}
int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  if (m == n) return 0;
  for (int i = 0; i < m; i++) {
    int first, second;
    scanf("%d %d", &first, &second);
    v[first].push_back(second);
    v[second].push_back(first);
  }
  dfs1(1, 0);
  auto p = dfs(1, 0);
  if (p.first.size() || p.second.size()) {
    printf("-1\n");
  } else
    printf("%lld\n", ans);
}
