#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
typedef long long ll;

int main()
{
    int h, w;
    cin >> h >> w;
    string s[304];
    for(int i = 0; i < h; i++) cin >> s[i];
    ll ans = 0;
    int r[304][304];
    for(int i = 0; i < (h + 1) / 2 + (w + 1) / 2 - 1; i++){
        int x = i - (h + 1) / 2 + 1;
        int y = (h + 1) / 2 - i - 1;
        for(int k = 0; k < max(h, w); k++){
            if(x >= 0 && x < w && y >= 0 && y < h && s[y][x] == '#') r[i][k] = 1;
            else r[i][k] = 0;
            x++; y++;
        }
    }
    int t[304][304];
    for(int i = 0; i < (h + 1) / 2 + (w + 1) / 2 - 1; i++){
        t[i][0] = 0;
        for(int j = 1; j <= max(h, w); j++) t[i][j] = t[i][j - 1] + r[i][j - 1];
    }
    for(int i = 0; i < (h + 1) / 2 + (w + 1) / 2 - 1; i++){
        int bx = i - (h + 1) / 2 + 1;
        int by = (h + 1) / 2 - i - 1;
        int x = bx, y = by;
        while(x < 0 || y < 0){
            x++; y++;
        }
        while(x < w && y < h){
            if(s[y][x] != '#'){
                x++; y++;
                continue;
            }
            for(int k = 1; k < max(h, w); k++){
                int lx = x + k;
                int ly = y + k;
                if(lx >= w || ly >= h) break;
                if(s[ly][lx] != '#') continue;
                if(i + k < (h + 1) / 2 + (w + 1) / 2 - 1){
                    ans += t[i + k][lx - bx + 1] - t[i + k][x - bx];
                }
                if(i - k >= 0){
                    ans += t[i - k][lx - bx + 1] - t[i - k][x - bx];
                }
            }
            x++; y++;
        }
    }
    for(int i = 0; i < h / 2 + w / 2; i++){
        int x = i - h / 2 + 1;
        int y = h / 2 - i;
        for(int k = 0; k < max(h, w); k++){
            if(x >= 0 && x < w && y >= 0 && y < h && s[y][x] == '#') r[i][k] = 1;
            else r[i][k] = 0;
            x++; y++;
        }
    }
    for(int i = 0; i < h / 2 + w / 2; i++){
        t[i][0] = 0;
        for(int j = 1; j <= max(h, w); j++) t[i][j] = t[i][j - 1] + r[i][j - 1];
    }
    for(int i = 0; i < h / 2 + w / 2; i++){
        int bx = i - h / 2 + 1;
        int by = h / 2 - i;
        int x = bx, y = by;
        while(x < 0 || y < 0){
            x++; y++;
        }
        while(x < w && y < h){
            if(s[y][x] != '#'){
                x++; y++;
                continue;
            }
            for(int k = 1; k < max(h, w); k++){
                int lx = x + k;
                int ly = y + k;
                if(lx >= w || ly >= h) break;
                if(s[ly][lx] != '#') continue;
                if(i + k < h / 2 + w / 2){
                    ans += t[i + k][lx - bx + 1] - t[i + k][x - bx];
                }
                if(i - k >= 0){
                    ans += t[i - k][lx - bx + 1] - t[i - k][x - bx];
                }
            }
            x++; y++;
        }
    }
    for(int i = 0; i < h; i++) reverse(s[i].begin(), s[i].end());
    for(int i = 0; i < (h + 1) / 2 + (w + 1) / 2 - 1; i++){
        int x = i - (h + 1) / 2 + 1;
        int y = (h + 1) / 2 - i - 1;
        for(int k = 0; k < max(h, w); k++){
            if(x >= 0 && x < w && y >= 0 && y < h && s[y][x] == '#') r[i][k] = 1;
            else r[i][k] = 0;
            x++; y++;
        }
    }
    for(int i = 0; i < (h + 1) / 2 + (w + 1) / 2 - 1; i++){
        t[i][0] = 0;
        for(int j = 1; j <= max(h, w); j++) t[i][j] = t[i][j - 1] + r[i][j - 1];
    }
    for(int i = 0; i < (h + 1) / 2 + (w + 1) / 2 - 1; i++){
        int bx = i - (h + 1) / 2 + 1;
        int by = (h + 1) / 2 - i - 1;
        int x = bx, y = by;
        while(x < 0 || y < 0){
            x++; y++;
        }
        while(x < w && y < h){
            if(s[y][x] != '#'){
                x++; y++;
                continue;
            }
            for(int k = 1; k < max(h, w); k++){
                int lx = x + k;
                int ly = y + k;
                if(lx >= w || ly >= h) break;
                if(s[ly][lx] != '#') continue;
                if(i + k < (h + 1) / 2 + (w + 1) / 2 - 1){
                    ans += t[i + k][lx - bx] - t[i + k][x - bx + 1];
                }
                if(i - k >= 0){
                    ans += t[i - k][lx - bx] - t[i - k][x - bx + 1];
                }
            }
            x++; y++;
        }
    }
    for(int i = 0; i < h / 2 + w / 2; i++){
        int x = i - h / 2 + 1;
        int y = h / 2 - i;
        for(int k = 0; k < max(h, w); k++){
            if(x >= 0 && x < w && y >= 0 && y < h && s[y][x] == '#') r[i][k] = 1;
            else r[i][k] = 0;
            x++; y++;
        }
    }
    for(int i = 0; i < h / 2 + w / 2; i++){
        t[i][0] = 0;
        for(int j = 1; j <= max(h, w); j++) t[i][j] = t[i][j - 1] + r[i][j - 1];
    }
    for(int i = 0; i < h / 2 + w / 2; i++){
        int bx = i - h / 2 + 1;
        int by = h / 2 - i;
        int x = bx, y = by;
        while(x < 0 || y < 0){
            x++; y++;
        }
        while(x < w && y < h){
            if(s[y][x] != '#'){
                x++; y++;
                continue;
            }
            for(int k = 1; k < max(h, w); k++){
                int lx = x + k;
                int ly = y + k;
                if(lx >= w || ly >= h) break;
                if(s[ly][lx] != '#') continue;
                if(i + k < h / 2 + w / 2){
                    ans += t[i + k][lx - bx] - t[i + k][x - bx + 1];
                }
                if(i - k >= 0){
                    ans += t[i - k][lx - bx] - t[i - k][x - bx + 1];
                }
            }
            x++; y++;
        }
    }
    cout << ans << endl;
}

Measured memory_bytes: 1280