#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;

typedef long long ll;
const ll MAXN=1e5+5;

ll n,m,cir,spx,spy;
ll dis[MAXN],sum[MAXN],nx[MAXN];
ll sta[MAXN],top;
bool vis[MAXN];
vector<ll> E[MAXN];

void dfs(ll u,ll fa=0){
    vis[u]=1;
    dis[u]=dis[fa]+1;
    for(ll i=0;i<(ll)E[u].size();i++){
        ll v=E[u][i];
        if(v==fa) continue;
        if(vis[v]){
            cir=dis[u]-dis[v]+1;
            spx=u,spy=v;
            continue;
        }
        dfs(v,u);
    }
}

void solve(ll u,ll fa=0){
    vis[u]=1;
    for(ll i=0;i<(ll)E[u].size();i++){
        ll v=E[u][i];
        if(v==fa||vis[v]) continue;
        solve(v,u);
        nx[u]+=nx[v];
        sum[u]+=sum[v];
    }
}

int main(){
    //freopen("print.in","r",stdin);
    //freopen("print.out","w",stdout);

    scanf("%lld%lld",&n,&m);
    for(ll i=1;i<=m;i++){
        ll u,v;
        scanf("%lld%lld",&u,&v);
        E[u].push_back(v);
        E[v].push_back(u);
    }
    dis[0]=-1;
    dfs(1);
    ll tot=0,ans=0;
    for(ll i=1;i<=n;i++)
        tot+=(sum[i]=(dis[i]&1?-1:1));
    if(!cir){ if(tot) return puts("-1"),0;}
    else{
        if(cir&1){
            if(tot&1) return puts("-1"),0;
            sum[spx]-=tot/2;
            sum[spy]-=tot/2;
            ans+=abs(tot)/2;
        }
        else{
            if(tot) return puts("-1"),0;
            nx[spx]=1;
            nx[spy]=-1;
        }
    }
    memset(vis,0,sizeof vis);
    solve(1);
    for(ll i=1;i<=n;i++){
        if(!nx[i]) ans+=abs(sum[i]);
        else{
            if(nx[i]==1) sum[i]*=-1;
            sta[++top]=sum[i];
        }
    }
    sta[++top]=0;
    sort(sta+1,sta+top+1);
    ll k=sta[(top+1)/2];
    for(ll i=1;i<=top;i++)
        ans+=abs(sta[i]-k);
    printf("%lld\n",ans);

    fclose(stdin);
    fclose(stdout);
}
