#include<bits/stdc++.h>
using namespace std;
#define REP(i,a,b) for(int i=(a),_ed=(b);i<=_ed;++i)
#define DREP(i,a,b) for(int i=(a),_ed=(b);i>=_ed;--i)
#define pb(x) push_back((x))
typedef long long ll;
inline int read(){
    register int x=0,f=1;register char ch=getchar();
    while(!isdigit(ch)){if(ch=='-')f=0;ch=getchar();}
    while(isdigit(ch)){x=x*10+(ch^'0');ch=getchar();}
    return f?x:-x;
}

const int N=1e5+5;
int n,m,dep[N],s,t,flg,S[N],k[N],stk[N],tp;
ll ans;
vector<int> E[N];

inline void Dfs(int u,int pa){
    for(int v:E[u]){
	if(v==pa)continue;
	if(dep[v]){flg=(dep[u]==dep[v]);s=u,t=v;continue;}
	dep[v]=dep[u]*-1;Dfs(v,u);
    }
}
inline void Cal(int u,int pa){
    for(int v:E[u]){
	if(v==pa||(u==s&&v==t)||(v==s&&u==t))continue;
	Cal(v,u);
	S[u]+=S[v];k[u]+=k[v];
    }
}

int main(){
    //freopen("in.in","r",stdin);
    n=read(),m=read();
    REP(i,1,m){int u=read(),v=read();E[u].pb(v),E[v].pb(u);}
    dep[1]=1;Dfs(1,0);
    int sum=0;
    REP(i,1,n)sum+=(S[i]=dep[i]);
    if(m==n-1){if(sum)return puts("-1"),0;}
    else if((flg&&(sum&1))||(!flg&&sum))return puts("-1"),0;
    if(m==n){
	if(flg){
	    S[s]-=sum/2,S[t]-=sum/2;
	    ans+=abs(sum/2);
	}
	else k[s]=1,k[t]=-1;
    }
    Cal(1,0);
    REP(i,1,n)
	if(!k[i])ans+=abs(S[i]);
	else if(~k[i])stk[++tp]=-S[i];
	else stk[++tp]=S[i];
    stk[++tp]=0;
    sort(stk+1,stk+tp+1);
    int x=stk[(tp+1)>>1];
    REP(i,1,tp)ans+=abs(stk[i]-x);
    printf("%lld\n",ans);
    return 0;
}
