Why doesn't this number decrase by 1?

#pragma strict

private var health : String = "Health: ";
private var hunger : String = "Hunger: ";

var decreaseSpeedHunger : int = 1;
var decreaseSpeedHealth : int = 1;

var healthValue : int = 100;
var hungerValue : int = 100;

function Awake()
{
	InvokeRepeating("DecreaseHunger", 2, 1);
}

function Update()
{
	health = "Health: " + healthValue;
	hunger = "Hunger: " + hungerValue;
	
	if(hungerValue <= 0)
	{
		InvokeRepeating("DecreaseHealth", 2, 1);
	}
}

function OnGUI()
{
	GUI.Box (new Rect (0,Screen.height - 25,100,25), health);
	GUI.Box (new Rect (110,Screen.height - 25,100,25), hunger);
}

function DecreaseHunger()
{
	hungerValue -= decreaseSpeedHunger;
}

function DecreaseHealth()
{
	healthValue -= decreaseSpeedHealth;
}

The whole thing works but when the hunger gets to 0 or less the health simply drops to 0 in 2sec. Any idea why?

Your health drops so fast because each frame you are launching a new InvokeRepeating() by calling InvokeRepeating() in Update(). If your frame rate was 60 fps, in a single second you would launch 60 separate InvokeRepeating() threads, and each thread would decrease hunger each time it is called. And you continue to pile up threads as time goes on. Given that your repeat rate for hunger and health are the same, a simple solution would be to move the call out of Update() and into DecreaseHunger() like this:

function DecreaseHunger()
{
    hungerValue -= decreaseSpeedHunger;
    if(hungerValue <= 0)
    {
       DecreaseHealth();
    }
}