// Original C++ solution (slower):
// C++ includes used for precompiling -*- C++ -*-



// Copyright (C) 2003-2013 Free Software Foundation, Inc.

//

// This file is part of the GNU ISO C++ Library.  This library is free

// software; you can redistribute it and/or modify it under the

// terms of the GNU General Public License as published by the

// Free Software Foundation; either version 3, or (at your option)

// any later version.



// This library is distributed in the hope that it will be useful,

// but WITHOUT ANY WARRANTY; without even the implied warranty of

// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

// GNU General Public License for more details.



// Under Section 7 of GPL version 3, you are granted additional

// permissions described in the GCC Runtime Library Exception, version

// 3.1, as published by the Free Software Foundation.



// You should have received a copy of the GNU General Public License and

// a copy of the GCC Runtime Library Exception along with this program;

// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see

// <http://www.gnu.org/licenses/>.



/** @file stdc++.h

 *  This is an implementation file for a precompiled header.

 */



// 17.4.1.2 Headers



// C

#ifndef _GLIBCXX_NO_ASSERT

#include <cassert>

#endif

#include <cctype>

#include <cerrno>

#include <cfloat>

#include <ciso646>

#include <climits>

#include <clocale>

#include <cmath>

#include <csetjmp>

#include <csignal>

#include <cstdarg>

#include <cstddef>

#include <cstdio>

#include <cstdlib>

#include <cstring>

#include <ctime>



#if __cplusplus >= 201103L

#include <ccomplex>

#include <cfenv>

#include <cinttypes>

#include <cstdbool>

#include <cstdint>

#include <ctgmath>

#include <cwchar>

#include <cwctype>

#endif



// C++

#include <algorithm>

#include <bitset>

#include <complex>

#include <deque>

#include <exception>

#include <fstream>

#include <functional>

#include <iomanip>

#include <ios>

#include <iosfwd>

#include <iostream>

#include <istream>

#include <iterator>

#include <limits>

#include <list>

#include <locale>

#include <map>

#include <memory>

#include <new>

#include <numeric>

#include <ostream>

#include <queue>

#include <set>

#include <sstream>

#include <stack>

#include <stdexcept>

#include <streambuf>

#include <string>

#include <typeinfo>

#include <utility>

#include <valarray>

#include <vector>



#if __cplusplus >= 201103L

#include <array>

#include <atomic>

#include <chrono>

#include <condition_variable>

#include <forward_list>

#include <future>

#include <initializer_list>

#include <mutex>

#include <random>

#include <ratio>

#include <regex>

#include <scoped_allocator>

#include <system_error>

#include <thread>

#include <tuple>

#include <typeindex>

#include <type_traits>

#include <unordered_map>

#include <unordered_set>

#endif



#define SZ(X) ((int)(X).size())

#define ALL(X) (X).begin(), (X).end()

#define REP(I, N) for (int I = 0; I < (N); ++I)

#define REPP(I, A, B) for (int I = (A); I < (B); ++I)

#define RI(X) scanf("%d", &(X))

#define RII(X, Y) scanf("%d%d", &(X), &(Y))

#define RIII(X, Y, Z) scanf("%d%d%d", &(X), &(Y), &(Z))

#define DRI(X) int (X); scanf("%d", &X)

#define DRII(X, Y) int X, Y; scanf("%d%d", &X, &Y)

#define DRIII(X, Y, Z) int X, Y, Z; scanf("%d%d%d", &X, &Y, &Z)

#define RS(X) scanf("%s", (X))

#define CASET int ___T, case_n = 1; scanf("%d ", &___T); while (___T-- > 0)

#define MP make_pair

#define PB push_back

#define MS0(X) memset((X), 0, sizeof((X)))

#define MS1(X) memset((X), -1, sizeof((X)))

#define LEN(X) strlen(X)

#define PII pair<int,int>

#define VI vector<int>

#define VPII vector<pair<int,int> >

#define PLL pair<long long,long long>

#define VPLL vector<pair<long long,long long> >

#define F first

#define S second

typedef long long LL;

using namespace std;



#define MAXN 100100







VI g[MAXN];

int vis[MAXN]={0};

bool bi(int v,int c=1){

    vis[v]=c;bool ok=1;

    for(int u:g[v]){

        if(vis[u]==0){

            if(!bi(u,-c))ok=0;

        }else if(vis[u]==vis[v])ok=0;

    }

    return ok;

}

int main(){

    fill(vis,vis+MAXN,0);

    for_each(g, g+MAXN, [](VI v){v.clear();});

    DRII(N,M);

    REP(i,M){

        DRII(v, u);

        --v,--u;

        g[v].push_back(u),g[u].push_back(v);

    }

    LL single=0,flower=0,bip=0;

    REP(i, N){

        if(vis[i]==0){

            if(g[i].size()==0)++single,vis[i]=1;

            else{

                if(!bi(i))++flower;

                else ++bip;

            }

        }

    }

    //cout<<single<<' '<<flower<<' '<<bip<<endl;

    LL ans=single*N*2-single*single+bip*bip*2+bip*flower*2+flower*flower;

    printf("%lld\n",ans);

}


// Optimized solution to the same problem (faster):
// C++ includes used for precompiling -*- C++ -*-



// Copyright (C) 2003-2013 Free Software Foundation, Inc.

//

// This file is part of the GNU ISO C++ Library.  This library is free

// software; you can redistribute it and/or modify it under the

// terms of the GNU General Public License as published by the

// Free Software Foundation; either version 3, or (at your option)

// any later version.



// This library is distributed in the hope that it will be useful,

// but WITHOUT ANY WARRANTY; without even the implied warranty of

// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

// GNU General Public License for more details.



// Under Section 7 of GPL version 3, you are granted additional

// permissions described in the GCC Runtime Library Exception, version

// 3.1, as published by the Free Software Foundation.



// You should have received a copy of the GNU General Public License and

// a copy of the GCC Runtime Library Exception along with this program;

// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see

// <http://www.gnu.org/licenses/>.



/** @file stdc++.h

 *  This is an implementation file for a precompiled header.

 */



// 17.4.1.2 Headers



// C

#ifndef _GLIBCXX_NO_ASSERT

#include <cassert>

#endif

#include <cctype>

#include <cerrno>

#include <cfloat>

#include <ciso646>

#include <climits>

#include <clocale>

#include <cmath>

#include <csetjmp>

#include <csignal>

#include <cstdarg>

#include <cstddef>

#include <cstdio>

#include <cstdlib>

#include <cstring>

#include <ctime>



#if __cplusplus >= 201103L

#include <ccomplex>

#include <cfenv>

#include <cinttypes>

#include <cstdbool>

#include <cstdint>

#include <ctgmath>

#include <cwchar>

#include <cwctype>

#endif



// C++

#include <algorithm>

#include <bitset>

#include <complex>

#include <deque>

#include <exception>

#include <fstream>

#include <functional>

#include <iomanip>

#include <ios>

#include <iosfwd>

#include <iostream>

#include <istream>

#include <iterator>

#include <limits>

#include <list>

#include <locale>

#include <map>

#include <memory>

#include <new>

#include <numeric>

#include <ostream>

#include <queue>

#include <set>

#include <sstream>

#include <stack>

#include <stdexcept>

#include <streambuf>

#include <string>

#include <typeinfo>

#include <utility>

#include <valarray>

#include <vector>



#if __cplusplus >= 201103L

#include <array>

#include <atomic>

#include <chrono>

#include <condition_variable>

#include <forward_list>

#include <future>

#include <initializer_list>

#include <mutex>

#include <random>

#include <ratio>

#include <regex>

#include <scoped_allocator>

#include <system_error>

#include <thread>

#include <tuple>

#include <typeindex>

#include <type_traits>

#include <unordered_map>

#include <unordered_set>

#endif



#define SZ(X) ((int)(X).size())

#define ALL(X) (X).begin(), (X).end()

#define REP(I, N) for (int I = 0; I < (N); ++I)

#define REPP(I, A, B) for (int I = (A); I < (B); ++I)

#define RI(X) scanf("%d", &(X))

#define RII(X, Y) scanf("%d%d", &(X), &(Y))

#define RIII(X, Y, Z) scanf("%d%d%d", &(X), &(Y), &(Z))

#define DRI(X) int (X); scanf("%d", &X)

#define DRII(X, Y) int X, Y; scanf("%d%d", &X, &Y)

#define DRIII(X, Y, Z) int X, Y, Z; scanf("%d%d%d", &X, &Y, &Z)

#define RS(X) scanf("%s", (X))

#define CASET int ___T, case_n = 1; scanf("%d ", &___T); while (___T-- > 0)

#define MP make_pair

#define PB push_back

#define MS0(X) memset((X), 0, sizeof((X)))

#define MS1(X) memset((X), -1, sizeof((X)))

#define LEN(X) strlen(X)

#define PII pair<int,int>

#define VI vector<int>

#define VPII vector<pair<int,int> >

#define PLL pair<long long,long long>

#define VPLL vector<pair<long long,long long> >

#define F first

#define S second

typedef long long LL;

using namespace std;



#define MAXN 100100







VI g[MAXN];

int vis[MAXN]={0};

bool bi(int v,int c){

    vis[v]=c;bool ok=1;

    for(int u:g[v]){

        if(vis[u]==0){

            if(!bi(u,-c))ok=0;

        }else{

            if(vis[u]==c)ok=0;

        }

    }

    return ok;

}

int main(){

    DRII(N,M);

    REP(i,M){

        DRII(v, u);--v,--u;

        g[v].push_back(u),g[u].push_back(v);

    }

    LL single=0,flower=0,bip=0;

    REP(i, N){

        if(!vis[i]){

            if(g[i].size()==0)++single;

            else{

                if(bi(i, 1)){

                    ++bip;

                }else{

                    ++flower;

                }

            }

        }

    }

    //cout<<single<<' '<<flower<<' '<<bip<<endl;

    LL ans=2*single*N-single*single+bip*bip*2+bip*flower*2+flower*flower;

    cout<<ans;

}

// Fastest known solution for this problem: