在vs2008中编译,出现下面的异常,请教什么情况

在vs2008中编译,出现下面的错误,请问什么情况?
#include "stdafx.h"
#include<iostream>
using namespace std;
template<typename M>;
M max(M a,M b,M c)

if(b>a)a=b;
if(c>a)a=c;
return a;
}

int main()
{
int i1=8,i2=5,i3=6,i;
double d1=56.9,d2=90.765,d3=43.1,d;
long g1=6788,g2=-456,g3=78943,g;
i=max(i1,i2,i3);
d=max(d1,d2,d3);
g=max(g1,g2,g3);
cout<<"max_i="<<i<<endl;
cout<<"max_f="<<d<<endl; ;
  cout<<"max_g="<<g<<endl;
return 0;
}

  error C2988: 不可识别的模板声明/定义

------解决方案--------------------
多写了个分号