#include<bits/stdc++.h>
using namespace std;
#define int long long
void read(int &x)
{
    int r = 0, ne = 1;
    char c;
    while (c < '0' || c > '9')
    {
        if (c == '-')
            ne = -1;
        c = getchar();
    }
    while (c >= '0' && c <= '9')
    {
        r = r * 10 + c - '0';
        c = getchar();
    }
    x = r * ne;
}
struct  Edge
{
    /* data */
    int i,nxt;
};
/* 链表 */
int h[100002],tot=1;
Edge e[200002];
inline void _add(int x,int y){
    e[tot].i=y;
    e[tot].nxt=h[x];
    h[x]=tot++;
    e[tot].i=x;
    e[tot].nxt=h[y];
    h[y]=tot++;
}
/* 输入 */
int n,m,x,y;
/* 偶环-求解 */
int s[100002],top,mid;
/* dfs */
bool odd;/* 奇环 */
int A,B;/* 环两个连接点 */
int w[100002];/* 点绿色权值(1,-1) */ /* 第二遍扫时存的是子树总权值 */
int k[100002];/* 偶环时标记多余边到LCA的点 */
int sum;/* 权值总和 */
int ans;/* 答案 */
inline void dfs(int x,int fa){/* 染色 */
    for(int i=h[x];i!=0;i=e[i].nxt){      
        int o=e[i].i;
        if(w[o]==w[x]){
            odd=true;
            A=x,B=o;
        }else{
            w[o]=-w[x];
            sum+=w[o];
            dfs(o,x);
        }
    }
}
inline void Dfs(int x,int fa){/* 求解 */
    for(int i=h[x];i!=0;i=e[i].nxt){
        int o=e[i].i;
        if(o==fa||(o==A&&x==B)||(o==B&&x==A))continue;/* 排除基环树的干扰 */
        Dfs(o,x);
        w[x]+=w[o];
        k[i]+=k[o];
    }
}
signed main(){
    read(n),read(m);
    for(register int i=0;i<m;++i){
        read(x),read(y);
        _add(x,y);
    }
    if(n%2){
        puts("-1");
        return 0;
    }
    w[1]=1;
    sum=1;
    dfs(1,0);    
    if(m!=n)/* 树 */{
        if(sum){
            puts("-1");
           return 0;
        }
    }else{
        if(odd)/* 奇环 */{
            if(sum&1){
                puts("-1");
                return 0;
            }
            ans+=abs(sum/2);
            w[A]-=sum/2,w[B]-=sum/2;
        }else/* 偶环 */{
            if(sum){
                puts("-1");
                return 0;
            }else 
                k[A]=1,k[B]=-1;
    }
    Dfs(1,0);
    for(register int i=1;i<=n;++i){
        if(k[i])
            s[++top]=k[i]*w[i];
        else
            ans=ans+abs(w[i]);
    }
    s[++top]=0;
    sort(s+1,s+top+1);
    mid=s[(top+1)/2];
    for(register int i=1;i<=top;++i)
        ans+=abs(s[i]-mid);
    printf("%lld\n",ans);
    return 0;
}