#include <algorithm>
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <queue>
#include <map>
#include <set>
#define prt printf
#define ll long long
#define int long long
#define spc prt(" ")
#define ent prt("\n")
#define pr_ prt("---")
#define prx prt("***")
#define prtn (putchar('N') , putchar('o'))
#define prty (putchar('Y') , putchar('e') , putchar('s'))
using namespace std;
int read(){
int f = 1 , k = 0;
char c = getchar();
while(c < '0' || c > '9'){
if(c == '-') f = -1;
c = getchar() ;
}
while(c >= '0' && c <= '9'){
k = (k << 3) + (k << 1) + (c ^ 48);
c = getchar() ;
}
return (f == 1 ? k : -k);
}
void output(int now){
if(now < 0){
putchar('-');
output(- now);
}
else{
if(now > 9) output(now / 10);
putchar((now % 10) ^ 48);
}
}
const int mod = 1e9 + 7;
int power(int base , int s){ int res = 1 ; while(s) { if(s & 1) res = res * base % mod ; base = base * base % mod ; s >>= 1 ;} return res % mod ;}
signed main(){
int n = read() , m = read() ; vector<int> mul(n + 1) ; mul[0] = 1 ;
for(int i=1 ; i<=n ; i++) mul[i] = mul[i - 1] * 2 ;
if(n > m) swap(n , m) ;
if(n == 1) return output(power(2 , m)) , ent , 0;
if(n == m){
if(! (n ^ 2)) return output(12) , ent , 0;
if(! (n ^ 3)) return output(112) , ent , 0;
if(! (n ^ 4)) return output(912) , ent , 0;
int ans = 912;
for(int i=5 ; i<=n ; i++) ans = mul[3] * ans % mod - 5 * mul[i] ;
return output(ans) , ent , 0;
}
else{
if(n + 1 == m){
if(! (n ^ 2)) return output(3 * 12) , ent , 0;
if(! (n ^ 3)) return output(3 * 112) , ent , 0;
if(! (n ^ 4)) return output(3 * 912) , ent , 0;
int ans = 912;
for(int i=5 ; i<=n ; i++) ans = mul[3] * ans % mod - 5 * mul[i] ;
return output(3 * ans % mod - 3 * mul[n]) , ent , 0;
}
if(n == 2) return output(4 * power(3 , m - 1) % mod) , ent , 0;
if(n == 3 && m >= 3) return output(112 * power(3 , m - 3) % mod) , ent , 0;
if(n == 4){
int ans = 912 ;
for(int i=n+2 ; i<=m ; i++) ans = ans * 3 % mod;
return output(ans) , ent , 0;
}
else{
int ans = 912;
for(int i=5 ; i<=n ; i++) ans = mul[3] * ans % mod - 5 * mul[i] ;
for(int i=n+2 ; i<=m ; i++) ans = ans * 3 % mod;
return output(ans) , ent , 0;
}
}
}