可以把面积为1的好三角形分成两类分开统计:两条边和两个坐标轴平行;只有一条边和某个坐标轴平行。

对于第一种情况,一定是1*2或者2*1的形式,一个1*2的矩形中含有4个不同的三角形。总数是4*((n-2)*(m-1)+(m-2)*(n-1))

对于第二种情况,可以分别统计底边为2,高为1和底边为1,高为2的情况。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int mod = 1e9+7;
int main() {
    ll n,m;
    cin>>n>>m;
    ll s=(n-2)*(m-1)*4%mod+(n-1)*(m-2)*4%mod;                          
    s=(s+2*(n-1)*(m-2)%mod*(m-2)%mod+2*(m-1)*(n-2)%mod*(n-2)%mod)%mod;
    s=(s+2*(n-2)*(m-1)%mod*(m-2)%mod+2*(m-2)*(n-1)%mod*(n-2)%mod)%mod;
    cout<<s;
}